![](/img/trans.png)
[英]What Is the difference between pre-compiled headers and pre-compiled binaries
[英]What are the pros & cons of pre-compiled headers specifically in a GNU/Linux environment/tool-chain?
預編譯的標題似乎可以在大型項目中節省大量時間,但似乎也是一個有點陷阱的痛苦。
使用預編譯頭文件的優點和缺點是什么,特別是因為它適用於在Gnu / gcc / Linux環境中使用它們?
我無法與GNU / gcc / linux交談,但我已經在vs2005中處理了預編譯的頭文件:
優點:
缺點:
ccache緩存前端到gcc,g ++,gfortran,...對我來說很有用。 正如其網站所說
ccache是一個編譯器緩存。 它充當C / C ++編譯器的緩存預處理器,使用-E編譯器開關和哈希來檢測何時可以從緩存中滿足編譯。 這通常會導致常見編譯速度提高5到10倍。
在Debian / Ubuntu上,只需執行' apt-get install ccache
'並在/usr/local/bin
創建軟鏈接,其名稱為gcc
, g++
, gfortran
, c++
,...指向/usr/bin/ccache
。
[ 編輯 ]為了使這一點更明確以回應一些早期的評論:這通過緩存更大的編譯步驟塊來提供基本上預編譯的頭和源 。 因此它使用類似於預編譯頭的想法,並進一步進行。 加速可能是戲劇性的 - 如網站所說,是5到10倍。
對於普通的C,我會避免使用預編譯的頭文件。 正如您所說,它們可能會導致問題,與常規編譯相比,預處理時間非常短。
對於C ++,預編譯頭可能會節省大量時間,因為C ++頭通常包含編譯成本高昂的大型模板代碼。 我沒有他們的實際經驗,所以我建議你測量你在項目中獲得的編譯節省多少。 為此,使用預編譯頭文件編譯整個項目一次,然后刪除單個目標文件,並測量重新編譯該文件所需的時間。
我在Qt項目中使用PCH,它使用cmake作為構建系統,它節省了大量時間。 我抓了一些PCH cmake腳本,需要一些調整,因為它們已經很老了,但它通常比我預期的更容易設置。 我必須補充一點,我不是一個cmake專家。
我現在包括Qt的大部分內容(QtCore,QtGui,QtOpenGL)和一些穩定的標題。
優點:
缺點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.