文章目录
一、常用基本符号
1.1 常用基本符号
常用符号表达式 | 含义 |
---|---|
$ | 获取变量值($后紧跟变量,如$(PATH)) |
$@ | 目标文件【也可以加上括号:$(@)】 |
$^ | 所有依赖文件 |
$< | 第一个依赖文件 |
$? | 更新过的依赖文件 |
$() | 获取Makefile中定义的变量的值 |
% 和 * | 均为通配符,表示“全部的xxx”,如:%.c或*.c,表示所有.c文件。 但是: 【 % 】为make语法规则通配符,在任何时候都表示“全部”的意思 【 * 】在变量定义或者函数调用时,该通配符会失效,需要搭配函数wildcard函数使用 |
.phony | |
clean | 伪目标:可以使用make clean执行该目标后面的语句 |
= | 延时赋值 即:变量使用的时候才会对其赋值 备注:make会将整个makefile全部展开完毕以后才决定对该变量赋什么值) |
:= | 立即重新赋值(备注:会清空之前的值) |
+= | 追加赋值 |
?= | 没有定义则赋值(备注:该操作符为也为延时赋值操作符的一种) |
1.2 常用路径
- 备注:
Makefile中要调用shell命令的话,需要用到特殊语法,即命令前面加上shell。否则Makefile并不知道这是shell命令。
格式为:$(shell xxx)
常用路径表达式 | 含义 |
---|---|
$(shell pwd) | 获取绝对路径。如 INCDIR:=$(shell pwd) |
1.3 常用make默认变量
默认变量 | 含义 |
---|---|
$(MAKE) | make命令本身 |
$(CC) | cc |
$(CXX) | g++ |
$(AR) | ar |
$(RM) | rm -rf |
$(CXXFLAGS) | |
$(CFLAGS) | |
$(ARFLAGS) | rv |
二、常用符号释义与实例
2.1 $@ 和 $^
test.o : test.c test.h head.h
gcc -o $@ $^
其中:
$@:表示test.o
$^:表示test.c test.h head.h这三个文件
2.2 $<
test.o : test.c
gcc -o $@ $<
其中
$@:同上
$<:表示test.c
2.3 %
all: test1.o test2.o
%.o : %.c
gcc -o $@ $<
其中:
注意1、Makefile规则是找第一个没有通配符的规则,也就是会找到all,发现有两个依赖,
注意2、那么看到这个%,就会在all那个规则中查找依赖文件,并逐次匹配,一次匹配一个,如:
(1)第一次匹配到test1.o,则%就表示test1,那么对应%.c就是test1.c
(2)第二次匹配到test2.o,则%就表示test2,那么对应%.c就是test2.c
(3)逐次匹配,直到匹配完最后一个依赖文件为止
2.4 $(@:xxx=)
(1)$@表示目标文件,
(2)= 表示用等号右边的字符串替换左边的字符串
如:
smdk2410_config : unconfig
$(@:_config=) #等号右边没东西,表示将smdk2410_config中的_config替换为空
上述代码替换完之后,会变成:(可以用echo命令打印试试)
smdk2410 : unconfig
三、:= += ?=测试
3.1 :=(重新赋值)
1、编写一个makefile代码如下:
2、测试结果:
可以看到x已经被重新赋值为Last_了,而y中的x还是之前的x