• Makefile: (实验) 目标命令的结束标志


    实验表示测试出来的结论,没有代码理论依据

    Makefile中,目标对应的命令结束标记是什么呢?换句话说,Make中怎么判断目标的最后一条命令?

    例如常见的目标编写如下:

    test1:
    	echo "test1"
    	echo "test without empty line"
    

    那如果目标下空一行呢?

    test2:
    	echo "test2"
    
    	echo "test with emtpy line"
    

    如果目标命令还掺杂了ifeq,define,ifndef呢?

    test3:
    	echo "test3"
    
    	echo "test with emtpy line"
    
    ifneq (DEBUG, )
    	echo "test with ifneq"
    endif
    

    这可能是一个非常“幼稚”的问题,以至于找到的学习资料都没有描述,却着实让我迷惑了一段时间。


    实验结论:

    1. 空行、ifeq、define、ifndef等并不作为命令集的结束
    2. 新的目标或者定义变量会识别为命令集的结束

    换句话说:

    一条目标的命令集会一直往下检索,直到遇到非命令相关的部分(例如其他目标,变量定义等)


    测试1:

    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。 停止。
    
  • 相关阅读:
    Node实践之二
    Node实践之一
    总结的JS数据类型判定(非常全面)
    利用chorme调试手机网页
    设计模式总结综述
    Python3标准库使用样例
    systemd 文档教程
    编写Postgres扩展之五:代码组织和版本控制
    编写Postgres扩展之三:调试
    编写Postgres扩展之四:测试
  • 原文地址:https://www.cnblogs.com/gmpy/p/10653012.html
Copyright © 2020-2023  润新知