实验表示测试出来的结论,没有代码理论依据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。 中止。