2016-09-20 1 views
0

私はmakefileが依存ファイルを自動的に作成し、再構築が必要かどうかを判断できるようにしたい。
それを行うための方法を探している間は、私は、次の解決策を見つけた:私は私のメイクファイルに次の行を追加している:外出先で依存ファイルを作成し、再構築するかどうかを決定できますか?

-include $(OBJS:.o=.d) 

とレシピへの.oファイルに

%.o: %.cpp 
    $(CC) $(CFLAGS) $(DEBUG) $< 

を構築するためのIそれが含まれ、.oファイルをビルド無視し、ライン

$(CC) $(STD) -MM $< -o $*.d 

私が正しく理解していれば

、.oのファイルが存在しないすべての時間を追加しました。後でmakeを再実行すると、この.oファイル(.dファイルから取得)の依存関係がチェックされ、.oファイルを再構築する必要があるかどうかが決定されます。 そのために、プロジェクトをビルドすると、これらの.dファイルをすべて保存する必要があります。

私が望むのは、makeが.oファイルを再構築するかどうかを決定するたびに、.oファイル用の.dファイルを生成することです。この.dファイルによれば、終了時に.dファイルを再構築して削除するかどうかを決定します。

私はそれを達成する方法はありますか?

私は私の意志を十分に明確に表現したいと思います。ない場合は、ここで私が想像する流れです:

if (.o file doesn't exist): build it 
otherwise: build a .d file 
      rebuild or do nothing (according to the .d file) 
      delete the .d file 
+0

[Makefile(Auto-Dependency Generation)](http://stackoverflow.com/questions/8025766/makefile-auto-dependency-generation)の可能な複製。余分な行を取り除き、代わりに '-MMD -MP'を使います。 – user657267

答えて

0

あなたが望む行動はすでに作る方法です.dファイルの削除を除き、動作します。私はあなたがそれを望んでいるのか分かりません。なぜなら、実行するたびにオブジェクトファイルが古いかどうかを知る前に、.dファイルを再構築しなければならないということです。これは正当な理由なしにビルド時間を劇的に増加させます。

makeはインクルードされたメイクファイルをすべて再ビルドするたびに、自身を再実行し、makefileを最初から読み始める。だから、.dファイルを削除しない限り、それはあなたが望むように動作します。この機能に関する情報はGNU make manualです。

ただし、これは従属性を管理するうえで最適な方法です。それは動作しますが、必要以上に遅いです。これを扱うもっと「現代的な」方法の説明は、hereで見つけることができます。

関連する問題