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


164

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

这是完整性的确切错误:

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

1
您必须提供更多信息。您究竟会遇到什么错误?您的项目当前如何配置?
阿萨夫·拉维

只需简单的重建就可以解决我的问题。
德庆

Answers:


436

注意: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. ...但是这次选择“预编译头创建(/ Yc)”。这只会绑定到一个文件stdafx.cpp。
  12. 将#include“ stdafx.h”放在所有源文件的最顶部。

幸运13.双手合十并点击“构建”。


58
我不知道stdafx.cpp应该有不同的设置。好答案。
专家

5
这应该是公认的答案,因为另一个答案缺少步骤10和11。谢谢!
JBentley 2013年

2
这是比我更基本的答案。要使PCH正常工作,必须执行步骤1-7,但是问题中的错误消息表明这些步骤已经完成。OTOH,它假设一个stdafx.pch文件,而xxxxx.pch问题中的则提示一个更复杂的问题(多PCH设置)。
MSalters 2014年

1
这个答案确实节省了一天。谢谢。
马特·克雷格

谢谢你,先生!回到我的C / C ++ r根源开始一个新项目,我感觉有些不对劲
Colby Africa

59

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

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

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

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


13
那么它可能缺少/ Yc:编译器选项。顺便说一下,该选项位于项目属性页/配置属性/ C-C ++ /预编译标题中
WIP

22

固定:

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

  2. 编译带有/ Yc标志的xxxxx.cpp创建预编译头)
    (右键单击xxxxx.cpp->属性->预编译头-> 创建

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


这使我固定。非常感谢你!
CharlesW

7
  1. 右键单击该项目,然后选择属性菜单项
  2. goto C / C ++->预编译头
  3. 选择不使用预编译头

这对我有用。我删除了“ stdafx.cpp”,然后再将其添加回去,直到我关闭了预编译的头文件,该错误才会消失。该项目无论如何都是微小的,因此它似乎并没有对速度产生太大影响。
Contango 2012年

3
4.选择Create (/Yc)(还原,然后再次使用)
Bitterblue 2014年

2

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


2

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

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

我已经签入了文件夹,但是由于git自动忽略.pch文件(请检查.gitignore以非常方便地执行此操作),因此我的.pch没有被签入。

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

希望这对某人有帮助。


0

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

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

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


0

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


是的,但是最初的问题与VS2008有关,而不与VS2015有关。您确定这将解决OP的问题吗?
T-Heron

不管它是哪个VS版本,该问题仍然会在不同的版本中发生。只需尝试一下,看看它是否适用于您要处理的任何内容。
Glover12 2013年

0

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


-1

尝试Build> Clean Solution,然后尝试Build> Build Solution。 对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.