C++ 如何在Qt项目中使用预编译头

C++ 如何在Qt项目中使用预编译头,c++,visual-studio-2010,qt,precompiled-headers,C++,Visual Studio 2010,Qt,Precompiled Headers,我的IDE:VisualStudio2010,我为VS、Qt版本使用Qt插件。4.8.1 在我的Qt项目中尝试创建预编译头(pch)时,我遇到了问题 我在非Qt项目中创建pch的常用方法是: 创建标题 包括将在头文件中预编译的文件 对于项目状态下的每个源文件,如果它将使用pch,则在其属性中 用于pch项目状态创建中的一个源文件 在所有源文件中包括pch 由于这些操作失败对于Qt项目,我决定将由于pch而发生的情况包括在MOC生成的所有文件中 我阅读了QtAssistant中关于预编译头的文章,

我的IDE:VisualStudio2010,我为VS、Qt版本使用Qt插件。4.8.1

在我的Qt项目中尝试创建预编译头(pch)时,我遇到了问题

我在非Qt项目中创建pch的常用方法是:

  • 创建标题
  • 包括将在头文件中预编译的文件
  • 对于项目状态下的每个源文件,如果它将使用pch,则在其属性中
  • 用于pch项目状态创建中的一个源文件
  • 在所有源文件中包括pch
  • 由于这些操作失败对于Qt项目,我决定将由于pch而发生的情况包括在MOC生成的所有文件中

    我阅读了QtAssistant中关于预编译头的文章,并做了以下工作:

  • 创建头文件

  • 对于项目集选项中的所有.cpp文件,请使用pch,对于一个创建

  • 转换为qmake生成的项目

  • 我运行qmake-project

  • 我修改了生成的.pro文件,如下所示:

    模板=应用程序 目标= DEPENDPATH+=。生成的文件 INCLUDEPATH+=。 预编译_头=StdAfx.h QT+=网络

    输入 HEADERS+=server.h StdAfx.h FORMS+=server.ui SOURCES+=main.cpp server.cpp StdAfx.h.cpp RESOURCES+=server.qrc

  • 我跑了qmake

  • 打开.pro文件并尝试构建它,但出现错误:

    错误2错误C1083:无法打开包含文件:“StdAfx.h”:没有此类文件或目录

  • 我做错了什么?

    我找到了解决办法。
    要在项目中使用预编译头,唯一需要做的事情是包含 .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使用,并创建一个用于pch的文件(NameOffleInWhichCreateOption将被设置),同时将生成.pch,创建预编译的头文件并包含所需的头文件

    pch.hpp:

    // precompiled headers
    
    // add C includes here
    
    #ifdef __cplusplus
    // add C++ includes here
    
    #include <iostream>
    #include <QtGui>
    
    #endif // __cplusplus
    

    Qmake现在将自动为编译器设置正确的选项。

    您是否创建了StdAfx.h文件并在其中包含所有要预编译的头文件?当然可以!我已经提到我创建了.h文件,但没有说明它是StdAfx.hd。您的答案是否包含我的问题或答案中未包含的任何新信息?你回答的目的是什么?你在和谁说话?@spin_八你自己的答案给出了错误的语法,用于将预编译头添加到.pro文件中。
    CONFIG
    选项应该是
    precompile\u header
    而不是头文件本身的名称。另外,
    PRECOMPILED\u SOURCE
    选项在任何地方都没有文档记录。我的答案在医生看来是正确的(而且对我来说总是很好)。@spin_八你错了。我不会重复我的话,我只会将你链接到我所展示的内容。CONFIG+=precompile\u header使它在Qt5.5.0(OSX)上工作。注意:
    PRECOMPILED\u SOURCE
    本质上是
    PRECOMPILED\u header
    的未记录构建工件。如果要从多个项目中使用相同的
    PRECOMPILED_头
    ,并且它们可能并行生成,则必须使用
    PRECOMPILED_源
    (具有不同的值)。否则,每个生成将重写header.h.cpp文件,其他生成可能会在其处于不确定状态时尝试处理它。这需要被视为每个目标临时文件,但默认情况下qmake不会以这种方式处理它。我想在这里添加一个警告,提醒您遵循此建议。我认为关键的一点是,QMake将自动为您为Visual Studio生成预编译的源文件,因此您不必像使用vanilla VS那样自己创建一个源文件。这在Qt5.5.0(OSX)上不起作用。使用CONFIG+=precompile_头作为@Gordon Freeman所指示的名称可以使其工作。@Borzh请比较回答日期和Qt 5可用的日期。我的答案是关于Qt4.8,我只是指出您的解决方案不适用于当前版本的Qt,所以其他用户不会花时间尝试。
    CONFIG += precompile_header
    PRECOMPILED_HEADER = pch.hpp
    HEADERS += pch.hpp