自动化Build的方法如下所示

 
#本文件自动进行build。

##########修改如下内容进行自定义。#######
PROGRAM   := hello.exe
SRCDIRS   :=.
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 obj
all : $(PROGRAM)

$(PROGRAM) : $(OBJS)
	g++ -o $(PROGRAM) $(OBJS)

objs : $(OBJS)

%.d: %.cpp
	g++ -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文件。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值