g++ -MMこの機能を使用して、依存関係を自動構築するのが好きです。私がこれを行う方法は次のとおりです。
include $(ALLOBJ:%.o=%.d)
%.d: %.cxx
@echo making dependencies for $<
@g++ -MM $(CXXFLAGS) $< -o $@
@sed -i 's,$*\.o,& $@ ,g' $@
基本的に、私はこのルールを与えることができALLOBJ、それは次のようになります:
.oすべての名前を名前に.d変換するincludeと、- が見つからない場合は、ファイル
.dから作成します.cxx%.d: %.cxxルールの最後の行は.d、依存関係が自動的に更新されるように、ファイルの名前をファイル自体に追加します。
この問題は、ヘッダーを削除したときに発生します。.dファイルはまだそれを見つけることを期待しており、そこにない場合、make は動揺します。1 つの解決策は、 に置き換えincludeて-include、コンパイル ルール内で依存関係を構築することです。残念ながら、これにはコンパイル ルールごとに依存関係を生成する行が必要であり、他のすべてのincludeエラーも無視されます (これはリスクが高いと思われます)。この問題を回避する依存関係を自動構築する他の簡単な方法はありますか?