一、通配符
*
* ?例子一:会扩展到所有 .o 结尾的文件clean:rm -rf *.o例子二:下面表达式不会扩展Object = *.o使用 object := $(wildcard *.o) 会进行扩展
%
自动构造规则。%.o : %.cgcc -o $@ $<等效于如下:(但是 生产的文件必须被其他target使用)test1.o : test1.cgcc -o test1.o test1.ctest2.o : test2.cgcc -o test2.o test2.c
参考:https://www.cnblogs.com/warren-wong/p/3979270.html
二、变量
$@:目标的名字
$^:构造所需文件列表所有所有文件的名字
$<:构造所需文件列表的第一个文件的名字
test1.o : test1.c other.hgcc -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.oecho .//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
