如何修复构建中缺少的.pch文件?

时间:2011-05-23 11:10:01

标签: c++ visual-studio precompiled-headers pch

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

这是完整性的确切错误:

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

11 个答案:

答案 0 :(得分:374)

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

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

  8. 如果您的Header Files中没有stdafx.h,请将其放在那里。编辑 它#include你想要预编译的所有标题。

  9. 将名为stdafx.cpp的文件放入项目中。把#include“stdafx.h” 在它的顶部,没有别的。
  10. 在解决方案资源管理器中右键单击stdafx.cpp。选择属性 和所有配置一样,如步骤4 ...
  11. ...但这次选择预编译标题创建(/ Yc)。这只会 绑定到一个文件stdafx.cpp。
  12. 将#include“stdafx.h”放在所有源文件的最顶部。
  13. 幸运13.用手指按住Build。

答案 1 :(得分:57)

预编译标题(pch)的使用分为两个步骤。

在第一步中,编译存根文件(在VS200x中,它通常称为stdafx.cpp)。此存根文件间接仅包含您要预编译的标头。通常,一个小标头(通常为stdafx.h)列出标准标头,例如<iostream><string>,然后将其包含在存根文件中。编译它会创建.pch文件。

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

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

答案 2 :(得分:20)

修正:

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

  2. 使用/ Yc标志编译 xxxxx.cpp 创建预编译标题)
      (右键单击xxxxx.cpp - &gt;属性 - &gt;预编译标题 - &gt; 创建

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

答案 3 :(得分:7)

  1. 右键单击项目并选择属性菜单项
  2. 转到C / C ++ - &gt;预编译标题
  3. 选择不使用预编译标题

答案 4 :(得分:2)

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

答案 5 :(得分:2)

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

AppCenter仅在找到Pofile并且在文件上找不到PODS文件夹时,才运行“ pod install”命令。

我已经签入了文件夹,但是因为git自动忽略了.pch文件(请检查.gitignore来解决这个问题),所以我的.pch没有被签入。

我通过强制.pch文件进行检查对问题进行了排序,但是删除PODS文件夹也应该起作用,因为在这种情况下Appcenter会运行pod install命令。

希望这对某人有帮助。

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

我正在搜索具有相同问题的iOS PCH文件,如果你也像我这样,我发现的解决方案是清除派生数据;关闭模拟器,转到xCode prefs - &gt;位置 - &gt;转到派生数据文件路径,关闭xCode,删除派生数据文件夹中的文件,重新启动并加油:)

答案 9 :(得分:0)

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

snapshot from nnn.vcxproj file

答案 10 :(得分:-1)

尝试构建&gt;清洁解决方案,然后构建&gt;构建解决方案This适合我。