首页 > 代码库 > 一个项目的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变量:
子目录中Makefile就比较简单了,如下就可以:
所有源码都可以在项目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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。