終級編譯優化就是:
将項目的所有 .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 ]; then
cppdir=$1
fi
cd $cppdir
mkdir -p "All"
all="All/all"
for idx in $( seq )
do
touch $all$idx".cpp"
mv $all$idx".cpp" $all$idx
: > $all$idx
done
idx=
list_alldir()
{
for file in $1/*
do
if [ -f $file ]; then
if [[ $file == *.cpp ]]; then
echo '#include "'${file/\.\//}'"' >> $all$idx
let idx=idx%+
fi
fi
if [ -d $file ]; then
list_alldir $file
fi
done
}
list_alldir "."
for idx in $( seq )
do
mv $all$idx $all$idx".cpp"
done
cd -
執行: