makefile简单使用(二)
抄抄改改, 搞的一个编译多层次目录下c文件的Makefile文件. 记录下
每个c文件都是一个独立文件, 可编译成执行文件. 各级子目录下使用同一个Makefile文件.
Makefile内容如下:
#子目录的Makefile直接读取其子目录就行 ifndef ROOT_DIR ROOT_DIR=$(shell pwd) endif MAKE = make RM = rm -f CP = cp -r SUBDIRS=$(shell ls -l | grep ^d | awk '{print $$9}') CUR_SOURCE=${wildcard *.c} CUR_OBJS=$(patsubst %.c, %.o, ${CUR_SOURCE}) CUR_DIST=$(basename ${CUR_SOURCE}) all:$(SUBDIRS) $(CUR_OBJS) $(foreach n, $(CUR_OBJS),$(CC) $(n) -o $(basename $(n));) $(SUBDIRS):ECHO make -C $@ $(CUR_OBJS):%.o:%.c $(CC) -c $^ -o $(ROOT_DIR)/$(OBJS_DIR)/$@ ECHO: @echo $(SUBDIRS) @echo $(CUR_DIST) mk: $(foreach n, $(SUBDIRS),$(CP) Makefile $(n);) $(foreach n, $(SUBDIRS),$(MAKE) -C $(n) $@;) clean: $(foreach n, $(SUBDIRS),$(MAKE) -C $(n) $@;) $(foreach n, $(CUR_DIST), $(RM) $(n);) $(foreach n, $(CUR_OBJS), $(RM) $(n);) #for n in $(CUR_OBJS); do $(RM) $$n $@; done //it`s also can do it
1. make处理当前目录下文件, 子目录下文件及子目录的子目录下的文件
2. make clean清除当前目录下生成的文件, 子目录下文件及子目录的子目录下的文件
3. make mk将Makefile文件递归复制到各级子目录及子目录的子目录下.
添加文件时, 无须修改其它文件
添加目录时, 在目录上层任何一级有Makefile的目录下执行"make mk"命令后即可.
上面例子中, 文件结构如下: