0

「質問モード」の再帰呼び出しを実行しようとしていますが、非常に特殊なシナリオでエラーが発生します。

私は 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) とは対照的に)。

どんな助けでも大歓迎です。ありがとう、ナチュム

4

1 に答える 1

0

問題は、-q指定されたオプションをローミングしています。-qコマンドは実行されませんが、最新の場合は終了ステータスが表示されます。ご利用の際${MAKE} make -q -C sub/aは実行されます。-q少しの順列と組み合わせの後、-Cオプションでは使用できないことがわかりました。完全に使用したい場合、make --quiteまたはタイムスタンプを確認したいだけの場合は、-t(タッチするがコンパイルしない) または '-n` (ドライラン) を試してください。

于 2013-03-24T11:22:07.647 に答える