windows上cygwin中使用ant,只用将ant解压缩到相应的目录就可以了,
但msys就不可以了。
找了一个办法,在调用ant命令的时候,设置ANT_HOME变量,在msys中
也可以的
比如:
ANT_HOME="c:/ant" ant
或者:
ANT_HOME="/c/ant" ant
windows上cygwin中使用ant,只用将ant解压缩到相应的目录就可以了,
但msys就不可以了。
找了一个办法,在调用ant命令的时候,设置ANT_HOME变量,在msys中
也可以的
比如:
ANT_HOME="c:/ant" ant
或者:
ANT_HOME="/c/ant" ant
以前从未在意过makefile的执行效率,直到最近,由于需要将代码前前后后编译几十遍甚至上百遍,才发现原来的方式实在太慢。
以前的方式:
ALL ?=
default: END
target1:
cd . && make clean ready ....
ALL += target1
target2:
cd . && make clean ready .....
ALL += target2
很多的target
done:
@echo done
END: $(ALL) done
这样前前后后编译下来,天哪,竟然要2个小时,想想这样的操作需要3遍,基本上一天就没有了。这实在忍受不了。
make命令支持-j参数,可以并行执行,但上述模式是不可以的。由于调用make命令会将-j参数设置为默认的,因此在最外部调用-j参数无实质性作用
测试一下大致的目标,将所有生成的中间文件的命令完全的写入到一个临时文件中,并在原来的目标中生成临时文件,以便检查依赖性通过,然后在最后一步运行中间文件的命令时使用并行执行。这样时间大幅度的降低为40分钟左右。
之前提到过,为了整理方便,新的项目将采用统一的规划。前两天正好找了一点点空闲,就整理了下。
规划是这个样子的:
1.从project.txt文件中读取项目的目录,每个项目为一行,对项目不做重复性判断。
2.对读出来的每个项目目录,进入到目录中,执行make。
3.默认执行项目的默认编译目标,但需要支持统一编译的某些特定目标,比如项目文档的生成。
4.所有生成的文件需要放入到指定的目录中。目录结构和项目目录结构除去盘符一样。比如对于brew的一个test项目,项目的目录结构为X:/brew/test,指定的生成位置为Y:/prj_bin下,则生成之后的文件放在Y:/prj_bin/brew/test中,再深的目录结构和单独编译某个项目的生成的目录结构一样。
5.命令行中要支持常用变量的自定义
曾经,有个项目,资源文件过大,mod+所有资源+sig+mif文件超过1.5MB(日本kddi有这方面限制),又不允许使用mod压缩的方法(该方法有些非常非常小的缺陷),他们说,随着mod附带一部分资源,剩下的资源文件在线下载吧。
听起来很简单,不就是把资源文件分割掉,放到网上去么,事实的情况是:程序中要知道随着mod附带了多少资源;总共有多少的资源包没有下载;下载了的资源包是否有损坏;网络通讯中间是否有错误;网络下载是否当天超过了6MB;本程序当天下载是否超过了3MB,(3MB和6MB等都是kddi的规定);下载完成之后,中间某个资源包错误之后,程序需要判断是哪一个,并且重新下载;包的分割多大为合适(用户不会希望等半天都没有进度显示);程序需要计算剩余多少没有下载。
一句话引发了一场灾难,我的项目都是使用make来编译的,资源使用make来整理的,如果make能帮我自动计算并分割,那我将会省很多事情。我很庆幸自己用命令行的方式,如果用IDE的方式,每次的更改将会是一场灾难。于是就写了下面的makefile:
继续阅读makefile自动切割资源文件