最近写的小项目文件越来越多,也加了一些子目录,就增加了子目录makefile,总结了一种写法分享给小伙伴
先看效果,


有几个目录common,drv,main,执行主目录makefile,会逐个进入这几个子目录调用子目录的makefile进行编译,clean的时候也是进入子目录进行make clean。
主目录makefile内容:
###进入子目录make,编译指定的.c文件为.o文件
target=load_main
export c1:=
export INCDIRS:=common drv
SRCDIRS=common drv main
PJTDIR:=$(shell pwd)
INC_PATH=$(addprefix -I ,$(INCDIRS))
SRCFILES:=$(foreach dirobj,$(SRCDIRS),$(wildcard $(dirobj)/*.c))
#OBJS:=$(patsubst %.c,%.o,$(SRCFILES))
export OBJS:=
include common/files.mk
include drv/files.mk
include main/files.mk
inc_files:=$(foreach incfile,$(SRCDIRS),include $(incfile)/files.mk)
LIBPATH=
rm_obj:=$(wildcard $(OBJS))
$(target):$(SRCDIRS)
# echo $(OBJS)
$(c1)gcc -o $@ $(OBJS) $(INC_PATH) -lpthread
$(SRCDIRS):ECHO
make -C $@
# OBJS+=$(wildcard $@/*.o)
# @echo $(OBJS)
ECHO:
# @echo $(SRCDIRS)
print:
echo incpath:$(INCPATH)
#@echo objs:$(OBJS)
debug:
make print -C main
.PHONY : clean
clean:
@for bdir in $(SRCDIRS);\
do \
make clean -C $$bdir;\
done
rm $(target)
子目录可以根据files.mk指定要编译的文件
子目录makefile:

makefile主要内容就这些了,源文件都是简单的打印就不列出来了
这样写法可以在主makefile不改变的情况下,源码文件增加只需要增加子目录以及子目录内的makefile,files.mk,然后在主目录执行make就可以了
这篇博客分享了一种通用的Makefile编写方法,适用于包含多个子目录的项目。作者通过主目录的Makefile逐个进入子目录进行编译和清理,子目录通过files.mk指定要编译的源文件,使得在添加新源码时无需修改主Makefile。这种方法简化了项目构建过程,提高了开发效率。
1489

被折叠的 条评论
为什么被折叠?



