一、通配符
*
* ?
例子一:会扩展到所有 .o 结尾的文件
clean:
rm -rf *.o
例子二:下面表达式不会扩展
Object = *.o
使用 object := $(wildcard *.o) 会进行扩展
%
自动构造规则。
%.o : %.c
gcc -o $@ $<
等效于如下:(但是 生产的文件必须被其他target使用)
test1.o : test1.c
gcc -o test1.o test1.c
test2.o : test2.c
gcc -o test2.o test2.c
参考:https://www.cnblogs.com/warren-wong/p/3979270.html
二、变量
$@:目标的名字
$^:构造所需文件列表所有所有文件的名字
$<:构造所需文件列表的第一个文件的名字
test1.o : test1.c other.h
gcc -o $@ $<
此时:$< 表示 test1.c
$^ 表示 test1.c other.h
$?:构造所需文件列表中更新过的文件
三、几个函数
wildcard: 扩展通配符
notdir:去除路径
$(SOURCES:.c=.o):表示变量SOURCES中.c 结尾的替换成.o结尾。
addprefix: 增加前缀
一个例子:
make all:
达到 OBJECTS 和 SOURCE的返回值
echo ./build//chunk.o ./build//common.o ./build//debug.o ./build//main.o ./build//memory.o
./build//chunk.o ./build//common.o ./build//debug.o ./build//main.o ./build//memory.o
echo .//chunk.c .//common.c .//debug.c .//main.c .//memory.c
.//chunk.c .//common.c .//debug.c .//main.c .//memory.c
参考:https://blog.csdn.net/liangkaiming/article/details/6267357