欠落ファイルを処理できるメイクファイル依存関係ルールが必要
-
04-07-2019 - |
質問
システムにはGNU Makeを使用しています。メイクファイルの最後に、gccの-MMスイッチを使用して多数の.dファイルを生成するMakedependsというインクルードがあります。次に、include $(CXXFILES:.cc = .d)行を使用して、各.ccファイルに.dファイルを含めます。しかし、ファイルを削除したりファイルを移動すると、依存関係のステップが中断し、手動で.dファイルを削除する必要があります(依存関係が失敗するため、make cleanでも動作しません)
これらの依存関係.dファイルを生成する方法や、ファイルの削除または再配置を適切に処理するこれらの依存関係.dファイルを含める方法はありますか?
EDIT:たとえば、serial.ccがあり、makefileがbuffer.hに依存するserial.dファイルを生成しますが、それを変更してbuffer.hが不要になり、bufferを削除します.h。次回makeを実行すると、serial.oをbuffer.hに依存させる.dファイルが含まれているため、チョークが発生します。
解決
http://make.mad-scientist.net/papers / advanced-auto-dependency-generation には、この正確な問題の説明と、その回避方法がいくつかあります。最初は少し見当違いですが、「高度な」基本的にスポットオンです。
他のヒント
2つの可能性:
最初に、Makefileにルールを追加して依存関係ステップを実行できますか
.SUFFIXES: .d
%.d::
makedepend_command_here
そうでない場合は、GNU Makeの info
ページの Last Resort
セクションから:
たとえば、 makefile、あなたは気にしないかもしれません ソースファイルには実際のデータのみが含まれます それらが存在すること。その後、あなたはするかもしれません これ:
%:: touch $@
必要なすべてのソースファイルを引き起こす (前提条件として)作成される 自動的に。
これは空の .d
ファイルを作成するのに役立ちますか?
オプション-rm-stale
で makepp を使用する場合、ビルドできなくなったファイルに気付き、削除します。これが通常のユースケースである場合、ビルドツリーのルートにある .makepprc
にそのオプションを入れると、常に使用されます。
しかし、もちろんmakeppはこの依存関係の検出自体すべてを処理するため、メイクファイルを乱雑にする必要はありません。 gcc -MM
が失敗する場合にコンパイラが取得するのに間に合うように必要なヘッダーを生成できるため、アプローチよりも優れています。
makeppにはさらに多くのことがあります。 GNU makeでできることのほとんどすべてを実行することに加えて、はるかに便利なことがあり、Perlプログラミングでmakefileを拡張することもできます。