makefile学习之路——变量和函数调用小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makefile学习之路——变量和函数调用小结相关的知识,希望对你有一定的参考价值。
为了能够巩固之前的学习,这里用一个小项目来完成变量和函数的总结。
需求如下:
1、 自动生成target文件夹存放可执行文件
2、 自动生成objs文件夹存放编译生成的目标文件
3、 支持调试版本的编译选项
4、 考虑代码的扩展性
#使用的命令 CC := gcc MKDIR := mkdir RM := rm -rf #目标文件夹 DIR_OBJS := objs DIR_TARGET := target #辅助变量 DIRS := $(DIR_OBJS) $(DIR_TARGET) #目标 TARGET := $(DIR_TARGET)/hello-makefile.out #源文件, 通过使用预定义函数获取 SRCS := $(wildcard *.c) #main.c const.c fun.c #根据源文件,获取目标文件,然后,将目标文件放到文件夹下 OBJS := $(SRCS:.c=.o) #main.o const.o fun.o OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS)) #objs/main.o objs/const.o objs/fun.o #定义伪目标 .PHONY : rebuild clean all #定义最终规则 $(TARGET) : $(DIRS) $(OBJS) $(CC) -o [email protected] $(OBJS) @echo "Target File ==> [email protected]" #创建文件夹 $(DIRS): $(MKDIR) [email protected] #根据目录完成模式替换,这里的.o文件都应该在objs文件夹下,因此 $(DIR_OBJS)/%.o : %.c $(CC) -o [email protected] -c $^ rebuild : clean all all: $(TARGET) clean : $(RM) $(DIRS)
上面是不考虑调试的代码,运行结果如下
下面增加编译选项功能
将这部分代码修改即可
$(DIR_OBJS)/%.o : %.c $(CC) -o [email protected] -c $^ $(DIR_OBJS)/%.o : %.c ifeq ($(DEBUG), true) $(CC) -o [email protected] -g -c $^ else $(CC) -o [email protected] -c $^ endif
以上是关于makefile学习之路——变量和函数调用小结的主要内容,如果未能解决你的问题,请参考以下文章