天天看點

iOS和Android終級C++編譯優化

終級編譯優化就是:

将項目的所有 .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。

時間都去哪了??

iOS和Android終級C++編譯優化

驚喜吧!!!

iOS和Android終級C++編譯優化

這是一個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 -

           

執行: