在头文件 VS2010 中定义的 c++ 预编译头文件。编译器找不到

标签 c++ visual-studio-2010 precompiled-headers

我继承了一些执行类似操作的代码,

文件头:HeaderFile.h

#ifndef HEADERFILE_H
#define HEADERFILE_H

#ifndef HEADERFILE_PCH_H
#include<LibStuff>
#include<LibStuff2>
#include<LibStuff3>
#include<LibStuff4>
#include<LibStuff5>
#endif

#include "FilesInProject"

Class A
{
  //Code

};

#endif

Cpp: 头文件.cpp

#include "HeaderFile_pch.h" //(1)

#include "HeaderFile.h"

//More code

我了解预编译 header 的用途以及代码在此处的作用(某种程度上)。当我将这些文件复制到我的项目中时,这样我就可以更新已弃用的代码但不会影响原始项目,VS2010 chocks on line (1)。 VS2010 说找不到那个文件。

我已经在这两个项目之间走了一圈,我找不到任何设置上的差异。

我错过了什么,为什么可以像这样将 PCH 嵌入到 header 中,而不是将它们实际移动到名为 HeaderFile_pch.h 的文件中。这是某种宏黑客攻击吗?

最佳答案

对于初学者来说,在您上面提供的示例中或您的本地 fs 上都没有 Headerfile_pch.h 这样的文件。

Visual C++ 允许您定义几种设置预编译头文件的方法。最常见的是在项目配置级别为所有源文件启用它,在 Configuration Properties/C++/Precompiled Headers 下,设置“Precompiled Header”,选择“Use”。相同的位置,设置“预编译头文件”,通常是“stdafx.h”,但可以是您选择的任何内容。所有文件都将获得此设置(因此是项目级别的配置)除了....

一个文件负责生成PCH文件。该文件通常是您项目中的 stdafx.cpp 文件,但同样,它可以是您想要的任何单一来源。大多数只是设置一个虚拟 cpp 文件,其中包含一件事:#include "myheader.h"(duh).. 为那个文件配置预编译头文件,从“使用”切换到“创建”。这可确保如果 PCH 的主要 header 不同步,则首先重新编译该源文件以重新生成 PCH 数据文件,然后再启动其他文件。

它的一个属性是绝对强制性的:包含 header (myheader.h 或任何你调用它的东西)必须是你正在编译的任何源文件中的第一个包含参与使用 pch,包括(希望很明显)您指定为“生成器”的文件(在上一段中标记为“创建”的文件)。

最后,如果由于构建环境中的异常情况(即做愚蠢事情的第 3 方 header )导致出现问题,您可以逐个文件地禁用 pch。

在 Visual Studio 中还有其他配置 PCH 设置的方法,但到目前为止这是最常见的。

关于在头文件 VS2010 中定义的 c++ 预编译头文件。编译器找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535050/

相关文章:

c++ - 预编译 header 给出杂散的 216 错误

objective-c - 如何将宏和常量放入 iOS 项目的 .pch 文件中?

c++ - 预编译特征 header

c# - 在更新模型后更新 View

c++ - 已在 .obj 中定义 - 没有双重包含

c++ - 在 Windows Mobile 上使用 WideCharToMultiByte

c++ - 全局指针由优化器解析 - 但引用不是 - 为什么?

c++ - 数组新表达式中的直接初始化与列表初始化

c++ - 高 dpi 和低 dpi 系统的 Qt Creator 行编辑和按钮大小

visual-studio-2010 - 为什么在 Visual Studio 2010 中的数据比较中缺少所有表?