最近写的小项目文件越来越多,也加了一些子目录,就增加了子目录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就可以了