Makefile
函数:
wildcard 这是扩展通配符函数,功能是展开成一列所有符合由其参数描述的文 件名,文件间以空格间隔;比如:罗列出src下的所有.c文件:$(wildcard ${SRC}/*.c)
patsubst 这是匹配替换函数, patsubst ( 需要匹配的文件样式,匹配替换成什么文件,需要匹配的源文件)函数。比如:用src下的*.c替换成对应的 *.o文件存放到obj中:$(patsubst %.c, ${OBJ}/%.o, $(notdir $(SOURCE)))
notdir 这是去除路径函数,在上面patsubst函数中已经使用过,去除SOURCE中文件的所有目录,只留下文件名;
$@:表示目标文件;一般是在规则中这么用:gcc -o $@ $(object);
$^:表示所有依赖文件;一般是在规则中这么用:gcc -o $@ $^ ;用所有依赖文件链接成目的文件;
$<:表示第一个依赖文件;在规则中使用:gcc -o $@ -c $< ;其实这个时候就是每个依赖文件生成一个目的文件;
变量:
#把所有的目录做成变量,方便修改和移植 BIN = ./bin SRC = ./src INC = ./include OBJ = ./obj #提前所有源文件(即:*.c文件)和所有中间文件(即:*.o) SOURCE = $(wildcard ${SRC}/*.c) OBJECT = $(patsubst %.c,${OBJ}/%.o,$(notdir ${SOURCE})) #设置最后目标文件 TARGET = main BIN_TARGET = ${BIN}/${TARGET} CC = gcc CFLAGS = -g -Wall -I${INC} #用所有中间文件生成目的文件,规则中可以用 $^替换掉 ${OBJECT} ${BIN_TARGET}:${OBJECT} $(CC) -o $@ ${OBJECT} #生成各个中间文件 ${OBJ}/%.o:${SRC}/%.c $(CC) $(CFLAGS) -o $@ -c $< .PHONY:clean clean: find $(OBJ) -name *.o -exec rm -rf {} \; #这个是find命令,不懂的可以查下资料 rm -rf $(BIN_TARGET)
第二版makefile
这个makefile的好处就是通用性,里面不涉及到具体的文件名,当你往src目录中添加新文件时,可以不需要修改makefile,所以这是个非常好的工具
1、warning函数
$(warning string)函数可以放在makefile 中的任何地方,执行到该函数时,会将string输出,方便定位make执行到哪个位置。warning函数可以放在makefile 中的任何地方:开始的位置、工作目标或必要条件列表中以及命令脚本中。这让你能够在最方便查看变量的地方输出变量的值。例如:
$(warning A top-level warning)
FOO := $(warning Right-hand side of a simple variable)bar BAZ = $(warning Right-hand side of a recursive variable)boo
$(warning A target)target: $(warning In a prerequisite list)makefile $(BAZ) $(warning In a command script) ls $(BAZ): |
这会产生如下的输出:
$ make makefile:1: A top-level warning makefile:2: Right-hand side of a simple variable makefile:5: A target makefile:5: In a prerequisite list makefile:5: Right-hand side of a recursive variable makefile:8: Right-hand side of a recursive variable makefile:6: In a command script ls makefile |
注意,warning函数的求值方式是按照make标准的立即和延后求值算法。虽然对BAZ的赋值动作中包含了一个warning函数,但是直到BAZ在必要条件列表中被求值后,这个信息才会被输出来。
debug 变量名
https://www.cnblogs.com/lotgu/p/5936465.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具