2016-07-07 3 views
0

あなたが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の最初のエントリを見ると、それはメイクファイルの名前です。しかし、メイクファイルをmakemake 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-*-ため

+1

簡単な答えは、 'MAKEFILE_LIST'には、makeファイルが解析された順に、解析されるmakefileであるファイル名のスペース区切りのリストが含まれているということです。 makeがmakefileを解析するすべての機能は、このリストを変更します。これには、 'MAKEFILES'変数、コマンドラインで' -f'オプションに与えられる名前、 'MAKEFLAGS'や' GNUMAKEFLAGS'変数に現れる '-f'オプションに与えられる名前、' include '指令。それは私の頭の上から私が考えることができるすべてです。 – MadScientist

+0

@MadScientistは 'make'の出力から、' MAKEFILES = 'を使ってメイクファイルが渡されたかどうかを推測できますか?それは私が本当に必要なすべてです。 – Adrian

+0

'make -p'の出力からどういう意味ですか?なぜ出力される 'MAKEFILES'変数の内容を調べてみませんか? – MadScientist

答えて

0

見て、あなたは実際のメイクファイルの名前の前に最初のすべてのMAKEFILE_LISTすなわちに表示されますするように設定されているものは何でも知っています。

MAKEFILE_LIST := thing.mk Makefile cfg.mk 

とあなたの相互参照はあなたが現在のメイクファイルの名前はMakefileで、すべてのものは、彼らが一番上にinclude Dだったので、メイクファイルが読み込まれた後に表示されていることを知っているよ

関連する問題