1. 程式人生 > >在VS中設定預編譯頭從而提高編譯速度

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

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

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


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

#ifndef _COMMON_H_
#define _COMMON_H_

#include <pcl/ModelCoefficients.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/segmentation/extract_clusters.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>

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中的內容,這樣就避免了大量的複製,從而大幅縮短編譯時間。
注意設定預編譯頭後,編譯時可能會出現: