181

当我在 Visual Studio 中构建我的 c++ 解决方案时,它抱怨缺少 xxxxx.pch 文件。我是否缺少一个设置来获取预编译的标头?

这是完整性的确切错误:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory
4

12 回答 12

489

注意:更高版本的 IDE 可能在相关文件的默认名称中使用“pch”而不是“stdafx”。在下面的说明中,可能需要用 pch 替换 stdafx。我道歉。这不是我的错。

  1. 在解决方案资源管理器中右键单击您的项目。
  2. 单击下拉菜单底部的属性。
  3. 在属性页面的左上角,从下拉菜单中选择所有配置。
  4. 打开 C/C++ 树并选择 Precompiled Headers
  5. 预编译头文件:选择使用 (/Yu)
  6. 填写预编译头文件字段。标准是 stdafx.h
  7. 单击确定

  8. 如果您的头文件中没有 stdafx.h,请将其放在那里。将其编辑为#include 您要预编译的所有头文件。

  9. 将一个名为 stdafx.cpp 的文件放入您的项目中。将 #include "stdafx.h" 放在它的顶部,仅此而已。
  10. 在解决方案资源管理器中右键单击 stdafx.cpp。再次选择属性和所有配置,如步骤 4 ...
  11. ...但这次选择 Precompiled Header Create (/Yc)。这只会绑定到一个文件 stdafx.cpp。
  12. 将#include "stdafx.h" 放在所有源文件的最顶部。

幸运 13. 交叉你的手指并点击 Build。

于 2012-09-07T21:49:39.933 回答
61

Precompiled Header (pch) 的使用是一个两步过程。

第一步,编译一个存根文件(在 VS200x 中,它通常称为stdafx.cpp.,较新的版本使用pch.cpp.)。这个存根文件间接地只包含你想要预编译的头文件。通常,一个小标题(通常是stdafx.hor pch.hpp)列出标准标题,例如<iostream>and <string>,然后将其包含在存根文件中。编译它会创建 .pch 文件。

在第 2 步中,您的实际源代码包含与第 1 步中的第一个标头相同的小标头。编译器在遇到这个特殊的头文件时,会改为读取相应的 .pch 文件。这意味着它不必每次都(重新)编译那些标准头文件。

在您的情况下,似乎第 1 步失败了。存根文件是否仍然存在?在你的情况下,那可能是xxxxx.cpp. 它必须是用 编译的文件/Yc:xxxxx.pch,因为这是编译器标志,表明它是 PCH 过程的第 1 步。如果xxxxx.cpp存在,并且是这样的存根文件,那么它可能缺少其/Yc:编译器选项。

于 2011-05-23T11:47:11.403 回答
25

使固定:

  1. 确保你的项目中有 xxxxx.cpp

  2. 使用 /Yc 标志编译xxxxx.cpp (创建预编译头文件)
    (右键单击 xxxxx.cpp -> 属性 -> 预编译头文件 ->创建

  3. 使用 /Yu 标志编译所有其他文件(使用预编译头文件)
    (右键单击项目 -> 属性 -> 预编译头文件 ->使用

于 2012-11-20T18:55:22.830 回答
8
  1. 右键单击项目并选择属性菜单项
  2. 转到 C/C++ -> 预编译头文件
  3. 选择不使用预编译头文件
于 2012-08-08T11:54:40.233 回答
2

是的,它可以像其他人指出的那样使用 /Yc 选项消除,但很可能您不需要触摸它来修复它。为什么在不更改任何设置的情况下首先出现此错误?您可能已经“清理”了项目,然后尝试编译单个 cpp 文件。在这种情况下,您会收到此错误,因为现在缺少预编译器标头。只需构建整个项目(即使不成功),然后构建任何单个 cpp 文件,您将不会收到此错误。

于 2013-11-21T16:37:21.540 回答
2

如果您在服务器构建(AppCenter)上发生这种情况并且您使用 CocoaPods 确保您的 Podfile 已签入。

AppCenter 仅在找到 Pofile 且未在文件中找到 PODS 文件夹时才运行“pod install”命令。

我签入了文件夹,但是因为 git 会自动忽略 .pch 文件(检查你的 .gitignore 以验证这一点),我的 .pch 没有被签入。

我通过强制 .pch 文件对其进行检查来对我的问题进行排序,但删除 PODS 文件夹也应该有效,因为在这种情况下 Appcenter 将运行 pod install 命令。

希望这可以帮助某人。

于 2018-10-08T15:51:11.900 回答
2

VS 搞砸了(我的是 2019 年;()。继续选择“不使用预编译头文件”,正如其他人指出的那样,然后使用任何文本编辑器打开项目文件(vcxproj),并在两个地方删除概述的两个条目。享受清理混乱!事实上,你在下面看到的 vcxproj 文件中的“pch.h”条目,你会在 VS 属性的界面中找到它。

nnn.vcxproj 文件的快照

于 2021-06-02T02:49:35.890 回答
1

尝试构建 > 清洁解决方案,然后构建 > 构建解决方案。 对我有用。

于 2014-03-05T04:47:13.123 回答
1

我知道这个话题很老了,但我最近在 VS2015 中处理这个问题,帮助删除构建文件夹并重新构建它。这可能是由于在构建时尝试关闭程序或程序停止/冻结 VS 而发生的。

于 2016-12-25T23:16:50.113 回答
1

我正在搜索有同样问题的 iOS PCH 文件,如果你也像我一样来到这里,我找到的解决方案是清除派生数据;关闭模拟器,转到 xCode 首选项 -> 位置 -> 转到派生数据文件路径,关闭 xCode,删除派生数据文件夹中的文件,重新启动并欢呼:)

于 2017-09-13T09:33:07.907 回答
1

我设法为自己创建了这个问题,因为我想使用来自不同目录的 pch.h 和 pch.cpp 文件。所以,我从我的项目中删除了这两个文件,然后将它们添加为其他地方的现有文件。无法再找到预编译头文件的大错误。

我无法从 Visual Studio 2019 UI 中找到解决问题的方法。您必须编辑项目文件并确保如下所示:

 <ClCompile Include="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
  </ClCompile>
于 2021-09-20T16:24:20.643 回答
0

如果一切正常,但存在此错误,则需要检查 ****.vcxproj 文件中的下一部分:

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

在我的情况下,配置名称不正确:只有第一个单词。

于 2016-10-30T16:14:50.737 回答