實驗表示測試出來的結論,沒有代碼理論依據bash
Makefile中,目標對應的命令結束標記是什麼呢?換句話說,Make中怎麼判斷目標的最後一條命令?學習
例如常見的目標編寫以下:測試
test1: echo "test1" echo "test without empty line"
那若是目標下空一行呢?code
test2: echo "test2" echo "test with emtpy line"
若是目標命令還摻雜了ifeq
,define
,ifndef
呢?get
test3: echo "test3" echo "test with emtpy line" ifneq (DEBUG, ) echo "test with ifneq" endif
這多是一個很是「幼稚」的問題,以致於找到的學習資料都沒有描述,卻着實讓我迷惑了一段時間。cmd
實驗結論:it
換句話說:學習資料
一條目標的命令集會一直往下檢索,直到遇到非命令相關的部分(例如其餘目標,變量定義等)class
測試1:test
var=val cmd6="cmd 6" test1: @echo "-- target 1 --" @echo cmd 1 @echo cmd 2 ifdef var @echo cmd 3 endif define common @echo cmd 4 endef $(call common) @echo cmd 5 @echo ${cmd6} test2: @echo "-- target 2 --"
執行結果:
[GMPY@09:14 tmp]$make test1 -- target 1 -- cmd 1 cmd 2 cmd 3 cmd 4 cmd 5 cmd 6
無論目標下是否有空行、ifdef等,依然是歸屬爲同一個目標的命令
測試2:
var=val cmd6="cmd 6" test1: @echo "-- target 1 --" TEST=TEST @echo cmd 1 test2: @echo "-- target 2 --"
執行結果:
[GMPY@09:19 tmp]$make test1 Makefile:7: *** commands commence before first target。 中止。