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"命令后即可.

   

上面例子中, 文件结构如下:

  

 

posted @ 2016-04-22 21:03  zhanglong71  阅读(416)  评论(0编辑  收藏  举报