终级编译优化就是:
将项目的所有 .cpp 和 .c 文件都 #include 到一个总的 all.cpp 文件中,把其它的文件从项目中排除,就编译这一个文件就行了。
XCode和Android Studio都测试过,30-40的编译时间立马降到8分钟左右。
虽然这个优化是针对Android的,但XCode也是有效的^_^
并且不影响在断点调试,有错误也会定位到具体的文件。
额外一个好处,再也不用添加文件,而修改mk文件了。痛苦呀,修改一次全编译一次。
注意:
1、不好的就是所有cpp里面定义的符号不得重复,为此我还修改了大半天变量名。
2、还有就是动任何一个地方都会全编译,当然对于出版本来说,无所谓了,因为每次发版本肯定是要clean,全编译的。
进一步优化:
将这个all.cpp拆成all1.cpp,all2.cpp,all3.cpp,all4.cpp4个文件
这样可以利用cpu的4核编译,编译的更快!
这样优化后,动一个地方只用编译1/4个文件,比只有一个文件时间少了75%。
我的项目里面原cpp文件有500+个文件,原来Android一个cpu类型编译一次40分钟就算快的了。用1个文件的时候基本是8m-10m左右,用4个文件再优化后是3m45s。
时间都去哪了??
惊喜吧!!!
这是一个cpu类型的时间,添加cpu类型后的时间加倍就行了
附带list.sh脚本
#!/bin/bash
cppdir="Classes"
if [ $# -gt 0 ]; then
cppdir=$1
fi
cd $cppdir
mkdir -p "All"
all="All/all"
for idx in $( seq 1 4 )
do
touch $all$idx".cpp"
mv $all$idx".cpp" $all$idx
: > $all$idx
done
idx=1
list_alldir()
{
for file in $1/*
do
if [ -f $file ]; then
if [[ $file == *.cpp ]]; then
echo '#include "'${file/\.\//}'"' >> $all$idx
let idx=idx%4+1
fi
fi
if [ -d $file ]; then
list_alldir $file
fi
done
}
list_alldir "."
for idx in $( seq 1 4 )
do
mv $all$idx $all$idx".cpp"
done
cd -
执行:
./list.sh Classes #目录