2012-12-04 126 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),而这正是我所展示的。 –