2012-12-04 62 views
5

我的IDE:Visual Studio 2010中,我使用Qt插件來處理VS,Qt ver。 4.8.1如何在Qt項目中使用預編譯頭文件

試圖在我的Qt項目創建預編譯的頭(PCH)我都面臨着問題

我在非Qt工程創建PCH usuall的做法是:
1.創建頭;
2.包含將被預編譯在頭文件;
3.對於項目中的每個源文件,如果它使用pch,則在其屬性中指定屬性;
4.對於項目狀態創建pch中的一個源文件; 5.在所有源文件中包含pch。

作爲那些行動失敗對於Qt項目我決定它發生什麼,因爲pch應該包含在MOC生成的所有文件中。

我在QtAssistant上閱讀了關於預編譯頭文件,並做了以下操作:
1.創建頭文件;
2.在項目中設置選項使用PCH所有的.cpp文件和一個創建
3.轉換爲qmake的生成的項目
4.我跑了qmake的-project
5.我修改生成的.pro文件,在這裏是:

TEMPLATE = app 
TARGET = 
DEPENDPATH += . GeneratedFiles 
INCLUDEPATH += . 
PRECOMPILED_HEADER = StdAfx.h 
QT += network 

# Input 
HEADERS += server.h StdAfx.h 
FORMS += server.ui 
SOURCES += main.cpp server.cpp StdAfx.h.cpp 
RESOURCES += server.qrc 
  1. 我QMAKE跑
  2. 開放.pro文件,並試圖構建它,並得到了錯誤:

    錯誤2錯誤C1083:無法打開包含文件:'StdAfx.h':沒有這樣的文件或目錄

我做錯了什麼?

+0

您是否創建了StdAfx?h文件並在其中包含所有希望預編譯的頭文件? – drescherjm

+0

當然可以!我已經提到過我創建了.h文件,但沒有說明它是StdAfx.h –

回答

3

我找到了解決方案。
唯一需要的,以便在項目中使用預編譯的頭做的是包括 在.pro文件下面的語句:

CONFIG += nameOfPrecompiledHeader.h 
PRECOMPILED_HEADER = nameOfPrecompiledHeader.h 
win32-msvc* { 
PRECOMPILED_SOURCE = nameOfFileInWhichCreateOptionWillBeSet.cpp /* other .cpp files will be with use option*/ 
} 

後的.pro修改和運行qmake的所有.cpp文件會設置爲使用pch和創建一個(nameOfFileInWhichCreateOptionWillBeSet)並生成.pch

+0

進一步閱讀:http://qt-project.org/doc/qt-4.8/qmake-precompiledheaders.html – Ich

+1

我想在此處添加警告,指出以下建議[可能導致問題](https://bugreports.qt.io/browse/QTBUG-44071)。我認爲關鍵的一點是QMake會自動爲Visual Studio生成預編譯的源文件,因此您不必像使用vanilla VS一樣自己創建一個源文件。 – sjdowling

+0

這不適用於Qt 5.5.0(OSX)。使用CONFIG + = precompile_header作爲@Gordon Freeman指示使其工作。 – Borzh

13

創建預編譯的頭文件幷包含所需的頭文件。

pch.hpp:

// precompiled headers 

// add C includes here 

#ifdef __cplusplus 
// add C++ includes here 

#include <iostream> 
#include <QtGui> 

#endif // __cplusplus 

然後在你的.pro文件:

CONFIG += precompile_header 
PRECOMPILED_HEADER = pch.hpp 
HEADERS += pch.hpp 

QMAKE現在會自動爲編譯器的正確選項。

+0

您的答案是否包含我的問題或答案中未涵蓋的任何新信息?你的答案的目的是什麼?你在問誰? –

+5

@spin_eight您自己的回答給出了將預編譯頭文件添加到.pro文件的錯誤語法。 'CONFIG'選項應該是'precompile_header'而不是頭文件本身的名字。另外'PRECOMPILED_SOURCE'選項沒有記錄在任何地方。就文檔而言,我的回答是正確的(對我而言,它總是可以正常工作)。 –

+6

@spin_eight你錯了。我不會重複自己,而只是將您鏈接到[相關文檔](http://qt-project.org/doc/qt-4.8/qmake-precompiledheaders.html),而這正是我所展示的。 –