makefile知识点总结

Makefile变量
 
$^         所有的依赖目标的集合,以空格分隔
$@        表示规则中的目标文件集
$?          所有比目标新的依赖目标的集合,以空格分隔
$<         依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
$(@D)   表示"$@"的目录部分(不以斜杠作为结尾) ,如果"$@"值是"dir/foo.o",那么"$(@D)"就是"dir",而如果"$@"中没有包含斜杠的话,其值就是"."(当前目录) 
$(@F)    表示"$@"的文件部分,如果"$@"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相当于函数"$(notdir $@)"
 
 
 
Makefile赋值语句
 
=   是最基本的赋值
:=  是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
 
备注:makefile中“=”和“:=”的区别到底有什么区别
1、"="
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
    x = foo
    y = $(x) bar
    x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

2、":="

":="表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
    x := foo
    y := $(x) bar
    x := xyz
在上例中,y的值将会是foo bar,而不是xyz bar了。

 

 
 

猜你喜欢

转载自www.cnblogs.com/baiyou123/p/9862215.html