标签:文件 依赖 变量 Makefile 笔记 目标 学习 规则 赋值
- 赋值符“=”
"="右边变量的值可能出现在赋值语句之前或者之后 - 赋值符“:=”
":="右边变量的值只能出现在赋值语句之前 - 赋值符“?=”
"?="左边的变量未定义时赋值才会发生 - 变量追加“+=”
追加前会自动添加空格 - 模式规则
至少在规则的目标定义中要包涵“%”,否则就是一般规则
目标中的“%”表示对文件名的匹配,“%”表示长度任意的非空字符串
当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值 - 自动变量
自动化变量就是这种变量会把模式中所
定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中
自动化变量 | 描述 |
---|---|
$@ | 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。 |
$% | 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。 |
$< | 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。 |
$? | 所有比目标新的依赖目标集合,以空格分开。 |
$^ | 所有依赖文件的集合,使用空格分开,如果在依赖“$^”会去除重复的依赖文件,值保留一份。 |
$+ | 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。 |
$* | 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模式为 a.%.c,那么“$*”就是 test/a.test。 |
- Makefile 伪目标
当有和目标同名的文件时,规则因为没有依赖文件,所以目标被认为是最新的
使用.PHONY:声明 - 条件判断
ifeq,ifneq,ifdef,ifndef
语法为:
ifeq...endif或者ifeq...else...endif - 函数
不支持自定义函数
用法为$(函数名 参数集合)
subst:用来完成字符串替换
patsubst:用来完成模式字符串替换
dir:用来获取目录
notdir:获取文件名
foreach:循环
wildcard:通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时,通配符不会自动展开,这个时候就要用到函数 wildcard
标签:文件,依赖,变量,Makefile,笔记,目标,学习,规则,赋值 来源: https://www.cnblogs.com/real-bert/p/15660787.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。