首页 > 代码库 > 一个项目的Makefile编写及调试

一个项目的Makefile编写及调试

在src目录下包含很多文件夹,那么需要遍历所有的目录执行Makefile,那么给一个在src目录下的Makefile。

# 需要排除的目录exclude_dirs := include bin# 取得当前子目录深度为1的所有目录名称DIRS := $(shell find . -maxdepth 1 -type d)DIRS := $(basename $(patsubst ./%,%,$(DIRS)))DIRS := $(filter-out $(exclude_dirs),$(DIRS)).PHONY: release cleanrelease:    @for x in $(DIRS);     do         make -C $$x;     doneclean:    @for x in $(DIRS);     do         make -C $$x $@;     done

 

再编写一个调试文件var.mk,内容如下:

%:

@echo ‘$*=$($*)‘

d-%:

@echo ‘$*=$($*)‘

@echo ‘  origin = $(origin $*)‘

@echo ‘   value = http://www.mamicode.com/$(value $*)‘

@echo ‘  flavor = $(flavor $*)‘

查看变量

make -f test.mk -f var.mk OBJS

make -f test.mk -f var.mk d-CFLAGS

说一说”d-” 前缀(其意为details),其中调用了下面三个参数。

  • $(origin):告诉你这个变量是来自哪儿,file表示文件,environment表示环境变量,还有environment override,command line,override,automatic等。
  • $(value):打出这个变量没有被展开的样子。比如上述示例中的 foo 变量。
  • $(flavor):有两个值,simple表示是一般展开的变量,recursive表示递归展开的变量

比如查看DIRS变量:

Image

Image(1)

子目录中Makefile就比较简单了,如下就可以:

Image(2)

所有源码都可以在项目https://github.com/jacksu/design_pattern中找到。

参考文档

http://coolshell.cn/articles/3790.html

http://www.cnblogs.com/AlphaDu/articles/1363925.html

http://www.gnu.org/software/make/manual/make.html