「質問モード」の再帰呼び出しを実行しようとしていますが、非常に特殊なシナリオでエラーが発生します。
私は MAKE 3.81 を使用していますが、これは 2 つの完全に別々の環境でテストされています。
「make -q」を呼び出し、その makefile が「$(MAKE) -C sub/a/」を呼び出し、その makefile が「$(MAKE) -f ../../makefile.b」を呼び出します。
テストケースは私ができる限り単純です。このエラーが発生する理由を誰かに教えてもらえますか:
nachum:/home/nachum/makefile_bug[1497]$make -q
make -C sub/a
make[1]: Entering directory `/home/nachum/makefile_bug/sub/a'
make -f ../../makefile.b
make[1]: *** [b] Error 1
make[1]: Leaving directory `/home/nachum/makefile_bug/sub/a'
make: *** [a] Error 2
nachum:/home/nachum/makefile_bug[1498]$
メイクファイルは次のとおりです。
makefile:
a:
$(MAKE) -C sub/a
sub/a/makefile:
b:
$(MAKE) -f ../../makefile.b
makefile.b:
all:
echo hi
この演習の要点は、必要に応じて最上位プロジェクトを適切にビルドできるように、サブ プロジェクトを再コンパイルする必要があるかどうかを確認できるようにすることです。それ以外の場合は、すべてにタイムスタンプを使用する必要があります。(以前はタイムスタンプを使用していましたが、それが他のことをさらに混乱させることに気付きました。)
この問題にはいくつかの奇妙な回避策があります。たとえば、(makefile 内の) のレシピに $(MAKE) の呼び出しの上に追加の行がある場合、つまり:
makefile:
a:
@echo hi
$(MAKE) -C sub/a
問題はなくなり、依存関係 (私の完全なテストケース) は引き続き機能します。また、make を直接使用すると動作が変わるようです ($(MAKE) とは対照的に)。
どんな助けでも大歓迎です。ありがとう、ナチュム