多个目录编译的makefile的编写

本文介绍了一种使用Makefile进行项目构建的优化方案,通过定义变量和目标规则来简化多模块项目的编译流程,并解决了传统方法中容易遗漏指令、无法并行编译及依赖关系不明确等问题。
all :  
    cd dir1;make all; 
    cd dir3;make all; 
    cd dir2;make all; 
clean :  
    cd dir1;make clean; 
    cd dir3;make clean; 

    cd dir2;make clean;



当然,我们也可以用makefile自身的特性,即 make all/clean -C dir1来进行编译,但是实际上两种写法都避免不了3个问题: 
1.当新加入一个模块的时候,要写入两句代码,一句是all,一句是clean,很容易漏掉。 
2.没有办法进行并行编译。因为很可能这些模块之间是不互相依赖的,而并行编译可以极大的提高速度(如果你受得了make那蜗牛般的速度的话,可以无视掉这一条) 
3.依赖关系不明显(可以看出是dir2依赖与dir3,但是没有明确的指出)

那么解决方法是怎样呢?有这样一个makefile



dirs = dir1 \ 
       dir2 \ 
       dir3 
.PHONY: all clean $(dirs) 
all: $(dirs) 
clean: $(dirs) 
$(dirs): 
    $(MAKE) -j2 -C $@ $(MAKECMDGOALS) 
dir2:dir3



在这个makefile的同级目录有3个目录,分别为dir1,dir2,dir3,其中每个目录的makefile就不说了,大家看图应该能明白,执行make后,结果如下:

QQ截图未命名






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值