首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

自动化Build的方法如上所示

2012-12-20 
自动化Build的方法如下所示#本文件自动进行build。##########修改如下内容进行自定义。#######PROGRAM: hel

自动化Build的方法如下所示

#本文件自动进行build。##########修改如下内容进行自定义。#######PROGRAM   := hello.exeSRCDIRS   :=.SRCEXTS   :=.cpp#########################################SOURCES := $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))OBJS    := $(foreach x,$(SRCEXTS), \      $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))DEPS    = $(patsubst %.o,%.d,$(OBJS)).PHONY : all objall : $(PROGRAM)$(PROGRAM) : $(OBJS)g++ -o $(PROGRAM) $(OBJS)objs : $(OBJS)%.d: %.cppg++ -MM -MD  $<-include $(DEPS)

?

?关于%和*的不同:下面这段话仔细品味:??
一个是变量(所有的%代表的是相同的字符串,以第一次匹配上为标准),一个是通配。??
一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将工作目录下的所有的.c文件进行编译并最后连接成为一个可执行文件:??
#sample Makefile??
objects := $(patsubst %.c,%.o,$(wildcard *.c))??
foo : $(objects)??
cc -o foo $(objects)??
这里我们使用了make的隐含规则来编译.c的源文件。对变量的赋值也用到了一个特殊的符号(:=)。关于变量定义可参考6.2 两种变量定义一节。函数“patsubst”可参考8.2 文本处理函数一节??
#关于.d文件。有这两段话,帮助理解为何生成.d文件??
---makefile的包含??
“include”指示符告诉make暂停读取当前的Makefile,??
而转去读取“include”指定的一个或者多个文件,??
完成以后再继续当前Makefile的读取。??
---makefile的更新(包括自我更新)??
make在读入所有makefile文件之后,??
首先将所读取的每个makefile作为一个目标,??
寻找更新它们的规则。??
如果存在一个更新某一个makefile文件明确规则或者隐含规则,??
就去更新对应的makefile文件。??

热点排行