Part 6
1.显示命令
linux命令echo: 作用是在显示器上回显一段文字
在makefile中,make命令会把要执行的command在执行前输出到屏幕上,如果我们用‘@’字符在命令行之前,这个命令将不被make显示出来。
如果make执行时,带入make参数“-n”或“--just-print”,那么它就只显示命令,但却不会执行命令。
2.命令执行
make会一条一条地执行命令。
如果要让上一条命令的结果应用到下一条命令,应该使用分号分隔这两条命令。
3.命令出错
为了忽略命令的出错,有三种方法
‘-’不管命令出错与否都认为运行成功
‘-i’忽略所有的错误
‘-k’如果某个命令出错,就终止执行该命令,但是继续执行其它规则。
4.嵌套执行make
l 大的工程每个目录中都有一个该目录的Makefile
Makefile写法:
subsystem:
cd subdir && $(MAKE)
l 总控Makefile变量可以传递到下级的Makefile中,需要主控中声明:
export < variable ... >
如果要传递所有的变量,只要一个export就够了,后面不用跟参数。
5.定义命令包????
define <....>
<...............>
endef
Part 7 变量的使用
变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:”、 “#”、“=”或是空字符(空格、回车等)。变量是大小写敏感的。
1.变量的基础
变量在声明的时候需要声明,在使用的时候需要以格式$(...)的格式。
2.变量的变量
使用其他变量的值来构造变量
方法一:用 = 可以使用后面出现的变量来定义
方法二:用 := 只能使用前面已经定义好的变量来进行定义
方法三:用 ?= 例子:
FOO ?= bar
其含义是,如果FOO没有被定义过,那么变量FOO的值就是“bar”,如果FOO先前被定义过,那么这条语将什么也不做
3.变量的高级用法
用法一:变量共有值的替换,例子:
foo := a.o b.o c.o
$(foo:.o=.c)
输出的结果为a.c b.c c.c
用法二:变量的值可以继续当做变量
$(x)的使用 $(x)含义为取变量x的值,但是该值可以继续作为变量
同时可以应用于操作符的左边
4.追加变量值
可以使用 += 给变量追加值
objects = main.o foo.o bar.o utils.o
objects += another.o
追加时会继承前次操作的赋值符,继承 = 时,不会出现递归的问题,make会自动解决。
5.override指示符?????
6.多行变量
利用define可以定义多行变量,以endef结束
7.环境变量??????
8.目标变量
作为一种局部变量,其作用域为 由这个目标所引发的所有的规则
格式: 目标:变量 = ...
prog : CFLAGS = -g
9.模式变量
在目标变量的基础上,目标可以指定为某种模式 %.o: CFGLA = 0
Part 8 条件判断
1.实例
2.语法:
<conditional-directive>
<text-if-true>
else
<text-if-false>
endif
条件关键字: ifeq ifneq
ifeq (<arg1>, <arg2>)
ifeq '<arg1>' '<arg2>'
ifeq "<arg1>" "<arg2>"
ifeq "<arg1>" '<arg2>'
ifeq '<arg1>' "<arg2>"
ifdef ifndef
ifdef<variable-name>
注意:条件表达式并不是命令,所以不用加Tab
Part 9 使用函数
1.函数的调用语法
函数的作用是用来处理变量,返回值也为变量
格式 $(<function> <arguments>) 函数名与参数之间用空格分开
2.字符串处理函数
subst 字符串替换函数
格式 $(subst <from>,<to>,<text>)
作用 将text中的<from>字符串替换为<to>字符串
返回 被替换后的字符串
sort 排序函数(为list中多个单词排序)
格式 $(sort <list>)
作用 给list升序
返回 排序后的字符串
注意 sort会删除list中相同的单词
3.文件名操作函数
4.foreach函数
循环函数
格式 $(foreach <var>,<list>,<text>)
作用 把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行
<text>所包含的表达式
返回 <text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach
函数的返回值
5.if函数
6.call函数
7.origin函数
8.shell函数
9.控制make函数