1

我克隆了一个包含 3 个项目的 repo、c++ 解决方案、一个控制台应用程序、.exe一个 dll 项目.dll和一个单元测试.dll。我不确定它是用什么版本的 VS 或编译器构建或创建的。

在我的机器上构建解决方案抛出错误

查找预编译头文件时意外结束。您是否伪造将 '#include "pch.h"' 添加到您的源代码中?

我在每个项目中创建pch.hpch.cpp根据另一个解决方案。

properties->c/c++->precompiled headers每个项目的

  • precompiled header = Create (/Yc)
  • precompiled header file = pch.h
  • precompiled header output file = $(IntDir)$(TargetName).pch

清除解决方案并删除Debug文件夹中的所有内容

现在构建解决方案抛出

致命错误 C1010:查找预编译头时文件意外结束。您是否伪造 t 将 '#include "stdafx.h"' 添加到您的源代码中?

  • 这也是 Azure 管道显示的错误。所以要接近我msbuild.exe从 VS 命令行使用的管道的构建过程。对我来说奇怪的部分是 VC++ 右键单击​​解决方案并构建,没有显示任何错误并构建项目,之后 msbuild.exe 也重新构建而没有错误。但是从 Debug 文件夹中删除所有内容并重新尝试 msbuild.exe 再次显示这些错误!

我应该如何强制解决方案中的所有项目使用stdafx.hpch.h

4

2 回答 2

1

预编译头文件是加快构建过程的功能,因此如果您在构建过程中遇到问题,您可以随时关闭预编译头文件(在整个项目的项目设置中选择“不使用预编译头文件”)并且构建应该可以工作.

如果你想用预编译的头文件构建项目,你应该只为一个只包含预编译头文件的包含语句的源文件(pch.cpp 或 stdafx.cpp)启用“创建”选项。所有其他源文件都应该选择“使用”预编译头文件。此外,它们必须具有正确的 #include 语句,用于您的预编译头文件作为文件中的第一个非注释行。

这个想法是编译器在处理带有'create'选项集的文件中的预编译头#include语句时会转储其内部状态。然后,当它在打开“使用”选项的文件中看到相应的包含时,它会加载该转储。加载转储可能比通过 windows.h 解析要快得多。所以你应该把任何常用的大头文件#include 语句放在pch.h 或stdafx.h 中。

如果 .cpp 文件启用了 'use' 选项,则会产生您收到的错误消息,但找不到在 'precompiled header file' 选项中设置文件名的 #include 语句。

于 2018-11-02T17:14:05.813 回答
0

项目 Configuration properties -> C/C++ -> Advanced -> Forced Include File中有一个选项。将所有平台下的所有配置的新名称 pch.h 放在此处。这将强制编译器自动#include "pch.h"在每个编译单元中。

停在这里片刻。对于所有配置和所有平台,或者您正在构建的平台。在这里三重检查,不能多说。另外,请检查您是否正在编辑整个项目的设置,而不是单个文件。

这很有用,因为从字面上看#include "pch.h",它必须是每个编译单元中的第一个包含。如果在第一行这样做有利于它,那将无济于事。不工作。文件必须自己做,而且只有.foo.cpp#include "foo.h"#include "pch.h"foo.cpp#include "pch.h"#include "foo.h"

或者,如果您已经在任何地方将 stdafx.h 重命名为其他内容并且无法理解错误C1083: Cannot open include file: 'StdAfx.h': No such file or directory来自哪里强制包含文件是检查的地方!

于 2019-08-15T00:20:38.390 回答