系列文章目录
三、Makefile书写命令
第一章请移步这里。
3.1 显示命令
- 通常make会把其要执行的命令行在命令执行前输出到屏幕上。当我们用
@
字符在命令行前,那么,这个命令将不会显示(打印)出来,示例如下:
@echo make all: libmse.a
此时当执行make时,终端会输出make all: libmse.a
但不会输出命令,如果没有“@
”,那么,make将输出:
make all: libmse.a
.... ...
-
如果make执行时,带入make参数
-n
或--just-print
,那么其**只显示命令,但不会执行命令,**利用这个功能可以帮助我们调试我们的Makefile,可以看到我们书写的命令是执行起来是什么样子的或是什么顺序的。 -
make参数
-s
或--silent
或--quiet
则是全面禁止命令的显示。
再次提醒,在Makefile中的命令,如果换行,必须要以 Tab 键开始。
3.2 命令执行
- 当当规则的目标需要被更新时,make会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。这里有点类似于shell指令中的
|
管道符,比如第一条命令是cd命令,我们希望第二条命令得在cd之后的基础上运行,那么就不能把这两条命令分别写在两行上,而应该把这两条命令写在一行上,用分号分隔。示例如下:
【1】
exec:
cd /home/ZSY
pwd
# 这样是错误的
------------------------
【2】
exec:
cd /home/ZSY; pwd
-
当我们执行 【1】中的
make exec
时,第一个例子中的cd没有作用,pwd
会打印出当前的Makefile目录,而【2】中,cd
就起作用了,pwd
会打印出“/home/ZSY
”。 -
make一般是使用环境变量SHELL中所定义的系统Shell来执行命令,默认情况下使用UNIX的标准Shell——
/bin/sh
来执行命令。
3.3 命令出错
- 每个命令运行完后,make会检测上个命令的返回码