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。 中止。
相关文章
相关标签/搜索