Makefile中一些参数的使用和区别

来源:互联网 发布:linux ftp命令 带端口 编辑:程序博客网 时间:2024/06/06 03:51

下边列出一些在Makefile文件中进程遇到的一些符合和关键字

1.基本参数

$@表示规则中的所有目标文件的集合。在模式规则中如果有多个目标,“$@”就是匹配于目标中模式定义的集合$% 仅当目标是函数库文件时,表示规则中的目标成员名,如果目标不是函数库文件(UNIX下是.a,Windows是.lib),其值为空。$<依赖目标中的第一个目标文件,如果依赖目标是以模式(即”%“)定义的,则”$<”是符合模式的一系列的文件集  $? 所有比目标新的依赖目标的集合,以空格分隔$^ 所有依赖文件,以空格分隔。如如果在依赖目标中有多个重复的,则自动去除重复的依赖目标,只保留一份$+同”$^”,也是所有依赖目标的集合,只是它不去除重复的依赖目标。$* 目标模式中“%”及其之前的部分$(@D)“$@”的目录部分(不以斜杠作为结尾),如果”$@”中没有包含斜杠,其值为“.”(当前目录)$(@F)“$@”的文件部分,相当于函数”$(notdir $@)”$(*D)同”$(@D)”,取文件的目录部分$(*F)同”$(@F)”,取文件部分,但不取后缀名$(%D)  函数包文件成员的目录部分$(%F)  函数包文件成员的文件名部分$(<D)  依赖目标中的第一个目标的目录部分$(<F)  依赖目标中的第一个目标的文件名部分$(^D)  所有依赖目标文件中目录部分(无相同的)$(^F)  所有依赖目标文件中文件名部分(无相同的)$(+D)  所有依赖目标文件中的目录部分(可以有相同的)$(+F)  所有依赖目标文件中的文件名部分(可以有相同的)$(?D)  所有被更新文件的目录部分$(?F)  所有被更新文件的文件名部分

2.include和sinclude的区别

include xxx     make时判断如果xxx不存在则提示错误,**退出编译**sinclude xxx    make时判断如果xxx不存在则忽略错误,**继续编译**-include 等同于sinclude

3.”=”,”:=”,”+=”的区别

=   普通赋值,可以先使用后定义,这就导致makefile在全部展开后才能决定变量的值:=  覆盖赋值,之前值被清除,且必须已经定义,在当前的位置就可以决定变量的值+=  添加赋值?=  如果没有被赋值过,就执行赋值操作

4.变量替换

$(VAR:A=B)  同${VAR:A=B}$(VAR:A=B) 替换变量“VAR”中所有“A”字符结尾的字为“B”结尾的字。“结尾”的含义是空格之前(变量值的多个字以空格分开)列如:abcde_qwer_xyz:$(@:_xyz=) 表示把目标"abcde_qwer_xyz"中的"_xyz"替换为空basename 取变量的前缀部分(点号之前的部分)

5.特殊符号

@ 放在行首,表示不打印此行,表示在make时不输出make的信息% 是通配符,%.c表示工程里的.c文件

6.wildcard

在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数 "wildcard"`$(wildcard PATTERN...)    `在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表,如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空如:"$(wildcard *.c)"来获取工作目录下的所有的.c文件列表
原创粉丝点击