优化makefile,提高团队开发效率

来源:互联网 发布:pdf拆分软件下载 编辑:程序博客网 时间:2024/04/30 02:12

优化makefile,提高团队开发效率

分享
标签: 技术  体会 2009-12-21 16:16

大型团队,多人开发,网络编译等等要素呼唤高效的生成过程(build procedure)。每天每个开发人员会执行无数次的make,有多少effort是浪费在waiting while compiling上的呢?统计过么?当然也只有精明的PM才可能会算这个帐。no waiting是不可能的,但很多时候是不必要的waiting。

所以,makefile,真是非常有必要认真锤炼:依赖关系是否必要,生成规则是否合理,。。。(瞎掰不出来了,其实我现在也认识有限:)

关键的一点,是否建立有快速特定的生成目标(make target)规则! 对于一般的开发者(相对于软件集成工程师Integration Engineer),平常大部分的青春都是耗费在重复的机械运动上:修改s1.c,编译s1.o,链接生成out.bin,下载到设备run,使用肉眼目测printf的结果,以决定是否继续在s1.c上折腾还是开始折腾s2.c。周而复始,乐不知疲。可怕的是,就修改了这么一个s1.c,一句make,把out.bin所依赖的成百上千个sx.c都捋了一次依赖关系,要是本地编译稍好,可是网络编译,不知老板多少bill会化作为飞舞的bits在网线上来回随风飘扬呢?(画外音:我就是一个coder,出来打酱油的,管我鸟事,make满了8小时走人。)

归结起来:尽量不做无用功。

具体操作:

1.为生成目标定制fast生成规则,取消依赖关系。

In makefile:

...

liba:s1.o s2.o s3.o

ar -crs liba s1.o s2.o s3.o

out: liba libb libx liby libz

ld liba libb libx liby libz -o out

In shell:

#make out

优化为==============================>>>>>>>>>>>>>>>>>>>>>>>>>>

In makefile:

...

liba:s1.o s2.o s3.o

ar -crs liba s1.o s2.o s3.o

out: liba libb libx liby libz

ld liba libb libx liby libz -o out

fasta:$(FOCUS)

ar -rs liba $(FOCUS)

ld liba libb libx liby libz -o out

In shell:

#make fasta FOCUS=s1.o

这样做的原理和前提是,我们已经不是普通的coder,已经对系统里makefile表明的依赖关系了然于胸,不用每次make都去麻烦机器去找不必要的依赖关系了。

今天先写到这里,这makefile里的猫腻实在太多,出道这么些年都没有弄清,貌似现在才开始有点开窍的感觉,实在惭愧于各位看官。


http://tkoc.blog.sohu.com/140186449.html

体验新版