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

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。 停止。

Makefile: (实验) 目标命令的结束标志的更多相关文章

  1. 第3课 - makefile伪目标的引入

    第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件  ==>  目标即文件名 (2)make 首先会检测目 ...

  2. Makefile 文件格式;makefile伪目标

    Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o  code.o gcc  -o  test   prog.o   code.o 当中 ...

  3. make命令回显Makefile执行脚本命令

    /********************************************************************** * make命令回显Makefile执行脚本命令 * 说 ...

  4. makefile实验二 对目标的深入理解 以及rebuild build clean的实现

    (一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworl ...

  5. makefile实验一 make的基本原则、伪目标、以及不使用.PHONY确实现和伪目标一样功能的一种方法

    target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标 ...

  6. makefile实验三 理解make工作的基本原则

    代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# r ...

  7. Makefile伪目标

    https://www.zybuluo.com/lishuhuakai/note/210174 本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正 ...

  8. makefile实验四 编译本地的源文件 + 变量的高级主题一

    <一>编译本地的源文件 + 变量的模式替换    实验代码 root@ubuntu:~/Makefile_Test/5make_test# vim makefile target := t ...

  9. 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...

随机推荐

  1. 乘风破浪:LeetCode真题_008_String to Integer (atoi)

    乘风破浪:LeetCode真题_008_String to Integer (atoi) 一.前言 将整型转换成字符串,或者将字符串转换成整型,是经常出现的,也是必要的,因此我们需要熟练的掌握,当然也 ...

  2. antlr-2.7.6.jar的作用

    项目中没有添加antlr-2.7.6.jar,hibernate不会执行hql语句 并且会报NoClassDefFoundError: antlr/ANTLRException错误

  3. Requests中文乱码解决方案

    分析: r = requests.get(“http://www.baidu.com“) **r.text返回的是Unicode型的数据. 使用r.content返回的是bytes型的数据. 也就是说 ...

  4. 4、集合set的功能介绍

    集合是易变(可改变)和无序聚集.集合set支持迭代,很像无值(或仅有键的)字典,用花括号表示{}.   1.集合的创建: 可以通过调用内建函数set()来创建,及向其传递一个迭代,该迭代的项目成为形成 ...

  5. CSS样式命名规则

    1.样式命名外 套: wrap主导航: mainnav子导航: subnav页 脚: footer整个页面: content页 眉: header页 脚: footer商 标: label标 题: t ...

  6. 五子棋AI算法

    原理框图总结 参考链接 http://blog.csdn.net/xiaoyu714543065/article/details/8746876 http://blog.csdn.net/pi9nc/ ...

  7. Django实战(二)之模板语言

    该实战教程基于菜鸟教程,菜鸟教程可参考:http://www.runoob.com/django/django-template.html 模板语法,每个框架都有其支持的模板语法,Django的模板语 ...

  8. sqoop2启动job报错

    set option --name verbose --value true   #打开报错详情输出 Exception has occurred during processing command  ...

  9. SDOI2018一轮NOI培训 题目整理

    \(qwq\)首先,这些题对于我而言--类似于\(emmm\)洪水猛兽 \(\mathcal{Day \ \ 1}\) T1 \(\mathcal{\color{red}{Description}}\ ...

  10. jquery toggleclass方法

    给元素更改样式,一般使用 addClass() 和removeClass() jquery官方文档 对 addClass的介绍: Adds the specified class(es) to eac ...