在VS中設定預編譯頭從而提高編譯速度

2021-06-21 14:13:52 字數 1535 閱讀 2010

其實這種方法在之前工作的時候也碰到過,今天寫程式時發現每次修改後再編譯的速度很慢,讓人崩潰!於是採用設定預編譯頭的方法,結果編譯速度大幅提高!本文通過我這次的程式例項講解這種方法。

先看下vs中工程的檔案結構

其中common.h檔案中內容為:

#ifndef _common_h_

#define _common_h_

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace pcl;

#endif // _common_h_

common.h檔案中主要是包含一些pcl工程的標頭檔案,這些標頭檔案是很大的,common.h檔案很少需要修改且被眾多的原始檔include。這三個條件很重要,因為本文介紹的方法的有效性就是基於這三個條件。在工程segment_plane中,每個.cpp和.h檔案都包含common.h檔案。

倘若不設定預編譯頭的話,編譯很慢,每次修改後在編譯也很慢。原因後面解釋,下面介紹其設定方法:

在【解決方案資源管理器】中右鍵precompile.cpp檔案,在屬性頁中設定建立預編譯標頭檔案

你可能覺得這個檔案命名方式有點奇怪,其實這個檔案沒什麼實際內容,僅僅是建立預編譯標頭檔案用的,這個檔案幾乎不會被改動!precompile.cpp的檔案內容如下:

// 該檔案僅僅用於建立預編譯頭 [4/17/2014 pc]

#include "common.h"

#include "typesdef.h"

通過以上兩部設定之後,編譯就變得非常快了。這是為什麼呢?

我們知道在編譯之前有個編譯預處理過程,這個過程中會將所有的標頭檔案的內容複製到原始檔中,普通的標頭檔案複製也沒什麼,但是正如之前所說,這些標頭檔案內容很多,那麼複製標頭檔案內容所花時間就很大了。而採用設定預編譯頭的方法編譯時間就會大幅縮小,這是因為編譯器會先編譯precompile.cpp,生成乙個precompile.pch檔案,之後編譯其他.cpp檔案就會直接使用precompile.pch中的內容,這樣就避免了大量的複製,從而大幅縮短編譯時間。

注意設定預編譯頭後,編譯時可能會出現:

error c3859: 超過了pch的虛擬記憶體範圍;請使用「-zm33」或更大的命令列選項重新編譯
這是因為標頭檔案過多,內容過大造成的,解決方案可以參考:

微軟對這個的設定可以參考:

正確使用vs的預編譯頭

預編譯頭的概念 所謂的預編譯頭就是把乙個工程中的那一部分 預先編譯好放在乙個檔案裡 通常是 以.pch為副檔名的 這個檔案就稱為預編譯標頭檔案這些預先編譯好的 可以是任何的 c c 甚至是inline的函式,但是必須是穩定的,在工程開發的過程中不會 被經常改變。如果這些 被修改,則需要重新編譯生成預...

VC 6中的預編譯頭

vc 6中的預編譯頭 預編譯頭的概念 在很多程式中,每個原始檔都存在一些相同的部分。比如要包括相同的一些標頭檔案,而且這些標頭檔案可能很長,例如 window.h 如果用普通的方法編譯這些原始檔,對這些標頭檔案在每個原始檔中的出現都要重新編譯,作了很多重複工作。如果能將這些標頭檔案專門進行編譯,並且...

在android系統中增加預編譯apk

將一些apk檔案預編譯到系統中,從而不用每次跟新系統後在安裝應用。mydroid gedit device ti nexttab device.mk 增加檔案 增加google play應用,需要如下apk檔案才能使用google play。product copy files 編譯錯誤 解決 ge...