2

include/c++ フォルダーに *.H c++ ヘッダーがありますが、これらのファイルを変更しても make は再度 make を実行しません。これらのファイルが変更されたときに Makefile を変更してリメイクするにはどうすればよいですか?

4

2 に答える 2

7

GNU make と GCC を使用していて、(すべてのソースから直接プログラムをビルドするのではなく) ソースごとに個別のオブジェクトをビルドしている場合は、必要な依存関係を自動的に生成できます。コンパイラのコマンドライン引数に次を追加します。

-MD -MP

-MD.d依存するすべてのヘッダーを指定するmakeルールを含む、各オブジェクトと一緒にファイルを生成します。これらの変更が予想されない場合は、代わりに を使用して、システム ヘッダー (ではなく-MMDに含まれるもの) を除外できます。ヘッダーのいずれかが削除された場合にターゲットが再構築されるように、ダミーのルールを生成します。<>""-MP

次に.d、makefile からすべてのファイルをインクルードします。これらのファイル-includeが欠落していてもエラーにはなりません。これを行うには、オブジェクト ファイルのリストを次のように変換します。

-include $(all_objs:.o=.d)
于 2013-11-01T12:32:06.813 に答える
2

ターゲットがヘッダーに依存していることを確認してください。

your_app: $(SOURCES) $(HEADERS)
  $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(SOURCES) $(LIBS) -o$@
于 2013-11-01T12:24:18.757 に答える