私は、Paul Smithのガイドhereを使ってGNU make 4.0用のmakefileをセットアップしました。 .dファイルが削除された場合を除き、すべてが動作するように見えますが、次のファイルで再作成されません。make all
`make`に不足している依存ファイルを自動生成させるには?
%.o : %.c $(DEPDIR)/%.d
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(POSTCOMPILE)
パウロの説明:
... $(DEPDIR)/%.d
宣言をそれが欠けている場合は自動生成された依存関係ファイルがターゲットの依存関係としてリストされている場合、ガイドによると、その後、
make
はそれを再作成しますターゲットの前提条件として として生成された依存関係ファイルが存在しない場合は、ターゲットが に再構築されます。
これは私の経験ではありません。 .d
ファイルを削除してmake all
を再発行すると、すべてが最新であると判断されます。 .cの再コンパイルを強制すると、もちろん依存関係ファイルが再作成されますが、ファイルが見つからないときに再構築されるはずの依存ファイルはありません。私のメイクファイルから
抜粋(これは私はそれがGCCを使用していないIBMの上ですが、MAKEDEPパラメータは依存関係ファイルの作成が原因):依存関係ファイルを生成するこの方法にこだわっ
POSTCCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d
%.MODULE: %.C
%.MODULE: %.C $(DEPDIR)/%.d
@system -v "crtcmod module($(OBJLIB)/$*) srcstmf('$<') MAKEDEP('$(DEPDIR)/$*.Td')"
@$(POSTCCOMPILE)
. . .
$(DEPDIR)/%.d: ;
.PRECIOUS: $(DEPDIR)/%.d
. . .
-include $(wildcard $(DEPDIR)/*.d)
、 make
には.d
個のファイルがありません(すべてのCファイルに含まれているとは限りません)。
リンクされた記事によると、最初の行は、その項目のビルトインルールを削除します。おそらく私の場合は必要ではないでしょう。なぜならGNU makeはおそらくモジュール用の組み込みルールを持っていないからです。ちょうど安全であるために、私はそれを取り出しました - 効果なし。 – smeep