親ディレクトリからビルドすると、何かが異なり、make は必要なすべての .o(s) をビルドせずに失敗しますが、ディレクトリに cd して make を実行するとビルドされますそれらは大丈夫です。
これら2つの実行の違いをGNUmakeに教えてもらうにはどうすればよいですか? 子を壊すいくつかの make 変数が親に設定されている必要がありますが、それらを追跡する方法を理解するのに助けが必要です。
親ディレクトリから実行makeしてもビルドに失敗する場合はfoo.o、試してくださいmake foo.o。それが失敗した場合はmake -n foo.o、両方のディレクトリで実行してみて (コマンドを実行する代わりに出力するため)、何が違うのかを確認してください。成功した場合は、親ディレクトリから実行したときにビルドしようとさえしていません。いくつかの光を当てるかもしれません.最後の手段として、決定プロセスに関する情報の急流が得られます.なぜそれが何をしているのか.foo.omake -nmake -d
変数の値を確認するための便利なトリックを次に示します。このルールをメイクファイルに入れます。
show_%:
@echo $@ is $($*)
これで実行できるようmake show_FOOになり、変数の値が表示されますFOO。
最後に、.o ファイルを作成する場所を知っていますか? Make はそこにあるものを使用してここにファイルを構築するのが得意ですが、その逆は得意ではないため、注意しないと中間ファイルを追跡できなくなる可能性があります。