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

posted on   _Echo  阅读(62)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示