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
这可能是一个非常“幼稚”的问题,以至于找到的学习资料都没有描述,却着实让我迷惑了一段时间。
实验结论:
- 空行、ifeq、define、ifndef等并不作为命令集的结束
- 新的目标或者定义变量会识别为命令集的结束
换句话说:
一条目标的命令集会一直往下检索,直到遇到非命令相关的部分(例如其他目标,变量定义等)
测试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: (实验) 目标命令的结束标志的更多相关文章
- 第3课 - makefile伪目标的引入
第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件 ==> 目标即文件名 (2)make 首先会检测目 ...
- Makefile 文件格式;makefile伪目标
Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o code.o gcc -o test prog.o code.o 当中 ...
- make命令回显Makefile执行脚本命令
/********************************************************************** * make命令回显Makefile执行脚本命令 * 说 ...
- makefile实验二 对目标的深入理解 以及rebuild build clean的实现
(一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworl ...
- makefile实验一 make的基本原则、伪目标、以及不使用.PHONY确实现和伪目标一样功能的一种方法
target: echo "hello_Makefile" .PHONY: clean clean: echo "clean Done .2019" 使用伪目标 ...
- makefile实验三 理解make工作的基本原则
代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# r ...
- Makefile伪目标
https://www.zybuluo.com/lishuhuakai/note/210174 本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正 ...
- makefile实验四 编译本地的源文件 + 变量的高级主题一
<一>编译本地的源文件 + 变量的模式替换 实验代码 root@ubuntu:~/Makefile_Test/5make_test# vim makefile target := t ...
- 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED
实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...
随机推荐
- 如何将本地项目上传至GitHub
首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://gi ...
- msysgit 上传文件夹,规范化的日常
在我们第一次成功的上传到github之后,要上传文件夹的我们要在msysgit里输入些什么呢? 选择要上传的文件夹前一项右键点击git bash here 进入msysgit后 首先初始化,输入 gi ...
- 041队列queue(重要,多线程使用)
内容:队列类型.方法.使用 ###############queue定义了3种信息列队模式类Queue([maxsize]):FIFO列队模式LifoQueue([maxsize]):LIFO列队模式 ...
- java二维数组定义初始化-杨辉三角
public class Array2Demo2_3 { public static void main(String[] args) { //定义初始化 int[][] arr = new int[ ...
- Postgresql 数据库,如何进行数据备份以及导入到另外的数据库
方法其实有很多种,这里用的方法比较稳妥.之后有时间会补充别的方法. 该方法分为三步:备份数据,新建表结构,导入数据 备份数据:>>\copy table_name to '/home/ba ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165322
Exp0 Kali安装 由于VMWare已经装好,镜像也是从上届拷下来的.下载部分就省略.. 新建虚拟机 安装好VM后点击新建虚拟机 选择稍后安装操作系统,系统选择Linux-ubuntu 接下来根据 ...
- 解决MySQL新建用户后无法登录问题
在PHPMyAdmin里创建了一个新的用户,并且创建了密码,但是却一直无法使用这个账户登录到MySQL里. 解决过程分享给大家~ 1.以root身份登录mysql 2.删除MySQL中默认存在一个用户 ...
- SpringBoot实战(六)之使用LDAP验证用户
关于ubuntu16.04服务器安装配置LDAP参考链接为:https://www.howtoing.com/how-to-install-and-configure-openldap-and-php ...
- jmeter接口测试3-正则表达式提取器的使用
正则表达式的用处很多,最基础的用法 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的权限高于模板$0 ...
- linux中安装jdk以及eclipse的安装
最近将系统换成了linux(ubuntu14.04),随之而来的是各种软件的配置,环境的配置,因此趁机将自己的过程整理出来. 1:linux中怎么安装jdk 1 首先现在jdk源文件http://ww ...