ルールの依存項目に注意
次のようなパターンルールを書いていた。
%.o : %.cpp %.h stdafx.h.gch @echo Making object file $(CXX) $(CXXFlags) -c $<
これは、*.cppと*.hが揃ってないと発火しない。*.hがない*.cppだと、デフォルトルールが適用される。そうすると、コンパイラの名前とかオプションもデフォルトで、自分で設定したコマンドラインが実行されない。
で、トラブル。
今回は、gcc の -std=gnu++0x とかマクロ定義の -DHOGE とかが効いてなかった。エラーになってくれたからかえって良かった。実行時に変なことが起きると分からんだろうな。危ねえー。
次を追加して、ヘッダがないときはエラーとした。
%.o : %.cpp $(error Need header file for $<)