2017-04-25 9 views
1

がここに私のMakefileの簡易版の親が無効になるわけではない:上記のMakefile:ルールなしの依存関係が

all: myprogram 

myprogram: main.o 
    c++ main.o -o myprogram 

main.o: main.cpp mylib.hpp 
    c++ -c main.cpp 

mylib.hpp: mylib.inl 

すべてのこれらのファイルは実際のファイルです。 mylib.hppを変更すると、main.cppが再コンパイルされます。しかし、私の問題は、mylib.inlを変更すると、main.cppはでなく、が再コンパイルされるということです。 mylib.inlを編集するときに、main.oターゲットを無効にするにはどうすればmyprogramターゲットを無効にできますか? ではなく.PHONYターゲットを使用することをお勧めします。毎回すべてを再コンパイルしないため、mylib.inlを編集するときだけです。

+0

おそらく、おそらくmylib.hppに触れるか、 'main.o:main.cpp mylib.hpp mylib.inl'に' mylib.hpp'を入れてください。 – chux

答えて

4

あなたの問題は、依存関係があなたのメイクファイルに記載されているものである:

mylib.hpp: mylib.inl 

は本当の依存性を説明していません。 mylib.inlを変更しても、mylib.hppは変更されません(このような変更を引き起こすルールはありません)。 mylib.inlmylib.hppから含まれている場合

それが実際にこのような依存関係につながる、main.oはなくmylib.hppに依存する必要があります:手動で個々の依存関係を維持

main.o: main.cpp mylib.hpp mylib.inl 

がある、エラーが発生しやすくなる可能性がありますなぜほとんどのコンパイラがmakeファイルから含めることができる依存関係ファイルを自動作成できる機能を提供しているのですか?コンパイルのためのより一般的なルールを提供することができます。これを使用する方法の詳細については、this articleを参照してください。

+0

ダングそれ、私はそれを恐れていました。しかし、答えをありがとう! – Jerfov2

関連する問題