あなたがmake all --print-data-base
を行うと、あなたはこのような出力を得る与えられたメイクファイルが実行されて行われた後、名前+ --print-データ・ベースからのメイクファイルのパスを決定する方法:GNUは作る - 出力
...
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o [email protected]
# environment
QT_INSTALL_PLUGINS = C:/Users/mureadr/Desktop/A/HMI_FORGF/qt5binaries/plugins
# default
COMPILE.cpp = $(COMPILE.cc)
# environment
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
# makefile (from 'Makefile', line 1)
MAKEFILE_LIST := C:/Users/mureadr/Desktop/A/ImpTarget.mk Makefile
# environment
TMP = C:/Temp
...
カレントディレクトリは単にCURDIR
と同じですが、makefileの名前はそれほど簡単ではありません。
6.14 Other Special Variables: MAKEFILE_LISTを見ると、答えは次のようになります。MAKEFILE_LIST
の最初のエントリを見ると、それはメイクファイルの名前です。しかし、メイクファイルをmake
にmake all --print-data-base MAKEFILES=MyMake.mk
で渡すと、最初のエントリはMyMake.mk
になります。
したがって、変数-*-command-variables-*-
を見て、メークファイルが渡されたかどうかを判断します。変数がMAKEFILE_LIST
である場合はそれを割り振り、残りのエントリの最初の文字列はメイクファイルの名前です。
QUESTION
は、実際のメイクの前にVAR MAKEFILE_LIST
で何かを挿入する任意の他の「落とし穴」がありますか? make all MAKEFILES=thing.mk
のように - - --print-data-base
出力で、それはVAR MAKEFILES
が存在すると設定した場合-*-command-variables-*-
ため
簡単な答えは、 'MAKEFILE_LIST'には、makeファイルが解析された順に、解析されるmakefileであるファイル名のスペース区切りのリストが含まれているということです。 makeがmakefileを解析するすべての機能は、このリストを変更します。これには、 'MAKEFILES'変数、コマンドラインで' -f'オプションに与えられる名前、 'MAKEFLAGS'や' GNUMAKEFLAGS'変数に現れる '-f'オプションに与えられる名前、' include '指令。それは私の頭の上から私が考えることができるすべてです。 – MadScientist
@MadScientistは 'make'の出力から、' MAKEFILES = 'を使ってメイクファイルが渡されたかどうかを推測できますか?それは私が本当に必要なすべてです。 – Adrian
'make -p'の出力からどういう意味ですか?なぜ出力される 'MAKEFILES'変数の内容を調べてみませんか? – MadScientist