在VS中設定預編譯頭從而提高編譯速度
阿新 • • 發佈:2019-02-14
其實這種方法在之前工作的時候也碰到過,今天寫程式時發現每次修改後再編譯的速度很慢,讓人崩潰!於是採用設定預編譯頭的方法,結果編譯速度大幅提高!本文通過我這次的程式例項講解這種方法。
先看下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的檔案內容如下:
// 該檔案僅僅用於建立預編譯頭 [4/17/2014 pc]
#include "common.h"
#include "typesdef.h"
通過以上兩部設定之後,編譯就變得非常快了。這是為什麼呢?
我們知道在編譯之前有個編譯預處理過程,這個過程中會將所有的標頭檔案的內容複製到原始檔中,普通的標頭檔案複製也沒什麼,但是正如之前所說,這些標頭檔案內容很多,那麼複製標頭檔案內容所花時間就很大了。而採用設定預編譯頭的方法編譯時間就會大幅縮小,這是因為編譯器會先編譯precompile.cpp,生成一個precompile.pch檔案,之後編譯其他.cpp檔案就會直接使用precompile.pch中的內容,這樣就避免了大量的複製,從而大幅縮短編譯時間。