2017-12-14 8 views
0

1つのファイルに依存するターゲットのリストを取得しようとしています。 makeの " - what-if"オプションは仕事をしているようですが、引数として与えている以外の古いファイルは無視したいと思います。makeオプション--what-if他の古いファイルも考慮してください

これは私のテストケースである(GNUとはdebianに取り組ん4.0を作る):

$猫のMakefile

all: exe1 exe2 

exe1: obj1 
    echo "a" > exe1 

exe2: obj2 
    echo "b" > exe2 

obj1: src1 
    echo "c" > obj1 

obj2: src2 
    echo "d" > obj2 

$

make: Nothing to be done for 'all'. 

$ -n -WのSRC1

を作るを作ります
echo "c" > obj1 
echo "a" > exe1 

パーフェクト。これは私が望む答えです:src1を変更すると、exe1が再構築されます。

しかし、私は "SRC2" は、他のファイルを変更した場合...

$ タッチsrc2の

は$ -n -WのSRC1に

echo "c" > obj1 
echo "a" > exe1 
echo "d" > obj2 
echo "b" > exe2 

を作るので、作るには、 "意思" でありますまた、 "exe2"。 他の古いファイルを無視するようにmakeに指示する方法はありますか? この場合、 "exe2"はファイル "src1"に依存しないので再構築されることには興味がありません。

つまり、私はこの質問に対する答えを探しています。「どのターゲットがsrc1に依存していますか?」

アドバイスありがとうございます!

+0

をexe1とexe2に依存するあなたのmakefileのデフォルトのルールです。つまり、makeはあなたが望むものを得たと言います。 – Vroomfondel

答えて

0

あなたが-Wに与えるオプションにかかわらず、makeは常に標準的なターゲットセット( "目標ターゲット")を構築しようとします。 -Wは目標の選択に影響しません。

makeで特定のターゲットをビルドする場合は、そのターゲットをコマンドラインで指定します。だから、あなたがを作るだけで、exe2を作らないようにしたいのであれば、make exe1を実行するでしょう。だから、あなたは、これらの機能を組み合わせてやりたい

make -n -W src1 exe1 

あなたはsrc2は新しいものではないと仮定したい場合は、-oオプションを使用することができます:あなたが最初に実行されている

make -n -o src2 -W src1 
+0

私のコマンドの目的は、 "src1"が変更されたときにどのターゲットが再構築されるかを知ることです。コマンドラインでターゲットを指定することはできません。 つまり、私はこの質問に対する答えを探しています。「どのようなターゲットがsrc1に依存していますか?」 – duffydac

+0

だから、あなたが本当に求めていることは、現実にかかわらず、1つのファイルを除いてすべてのファイルが更新されると仮定するようにmakeに指示する方法があるということです。あなたが直接その質問をしたかどうかを理解することははるかに簡単でした。答えはいいえ、それを行う方法はありません。'-o'オプションで修正されていないと思われる特定のファイルを明示的にリストすることはできますが、それらをすべて直接リストする必要があります。あなたが探していると思う '-B'フラグとは事実上反対のオプションはありません。 – MadScientist

+0

ありがとう、私は私の質問の最初の文章が十分明確であると思った...私は将来的にもっと実用的にしようとします! – duffydac

関連する問題