は以下のMakefile-fオプションを指定してmakefileを呼び出すと、サブメイクを呼び出すルールが破られるのはなぜですか?
prereqrule:
@echo "Executing prereqrule"
submakerule:
@echo "Executing submakerule"
check: prereqrule
[email protected]$(MAKE) submakerule
が、私は別のディレクトリからチェックルールを実行することを検討してください。最初のアプローチは2番目のアプローチでは機能しません。
$ make -C MakefileQuestion check
Executing prereqrule
Executing submakerule
submakeruleが-f
$ make -f MakefileQuestion/Makefile check
Executing prereqrule
make[1]: *** No rule to make target `submakerule'. Stop.
make: *** [check] Error 2
を見つけることができない-f
バージョンが生成されたサブ作る呼び出しでsubmakeruleを見つけることができない理由は何ですか?
私はこれを「修正」しています。 $THIS_FILE
パラメータを使用します。用
THIS_FILE := $(lastword $(MAKEFILE_LIST))
workingcheck: prereqrule
[email protected]$(MAKE) -f $(THIS_FILE) submakerule
作品
$ make -C MakefileQuestion workingcheck
Executing prereqrule
Executing submakerule
$ make -f MakefileQuestion/Makefile workingcheck
Executing prereqrule
Executing submakerule
-f
アプローチが動作しない理由を私は主に興味を持ってに近づく両方。 2つのユースケース(-C
と-f
)のmake
の実装では、2番目のサブケースに-f $THIS_FILE
が渡される必要があります。
これはどのように動作するのですか?$(MAKE)変数に関連しています。その[doc](https://www.gnu.org/software/make/manual/html_node/MAKE-Variable.html)によれば、 '/ bin/make'のような値をとりますが、私の場合は'/Applications/Xcode。app/Contents/Developer/usr/bin/make' –
また、なぜ '-f $(THIS_FILE)'を明示的に渡す必要があるのか尋ねていません。私はなぜそれが最初に必要なのか理解していない。 –