Makefile: (實驗) 目標命令的結束標誌

實驗表示測試出來的結論,沒有代碼理論依據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

  1. 空行、ifeq、define、ifndef等並不做爲命令集的結束
  2. 新的目標或者定義變量會識別爲命令集的結束

換句話說:學習資料

一條目標的命令集會一直往下檢索,直到遇到非命令相關的部分(例如其餘目標,變量定義等)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。 中止。
相關文章
相關標籤/搜索