By francis_hao Oct 30,2017
makefile中可以使用变量,变量有多种类型,下面分别介绍
简单变量
简单变量的命名规则和c语言一致。
给变量赋值就表示创建了这个变量,使用变量时需使用$()或${}这样的形式。
变量的赋值有几种不同的形式
= |
递归扩展的变量赋值,仅当在变量被使用的时候才去扩展。变量可以先使用后赋值 例如: a=$(b) b=$(c) c=d 在一系列的赋值过后,a的值就是$(b)。 只有在使用a的时候,才会一步步的扩展a=$(b)=$(c)=d |
:= |
简单扩展的变量赋值,变量立即扩展,变量需要先赋值再使用 例如: a=$(b) b=$(c) c=d 在一系列的赋值过后,a的值是'',也就是空。因为在执行a=$(b)的时候,就要立即扩展,而此时b还没有被赋值,也就是空的。 |
?= |
如果变量之前没有被定义,则执行赋值操作,否则什么也不做 |
+= |
追加变量值 如果变量之前没有被定义过,那么+=自动变成=。 如果变量之前有过赋值操作,就进行追加赋值,赋值属性继承之前的赋值操作(=/:=) |
自动化变量
自动化变量是指符合某一规则或模式的值
$@ |
表示规则中的目标 |
$< |
依赖目标中的第一个目标文件?? |
$? |
所有比目标新的依赖,以空格分隔 |
$^ |
所有的依赖目标的集合,以空格分隔,若有重复只保留一份。 |
$+ |
所有的依赖目标的集合,以空格分隔,不去除重复的 |
$* |
表示目标模式中%及其以前的部分,abcd.v -> %.v ->abcd make可以识别一些常见的后缀名,比如hello.o对应的$*就是hello |
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 * 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/7757822.html
参考
【1】 跟我一起写Makefile 陈皓 http://blog.csdn.net/haoel/article/details/2886/