gpt4 book ai didi

c++ - 从 `stdafx.h` 变为 `pch.h`

转载 作者:行者123 更新时间:2023-11-30 04:55:14 27 4
gpt4 key购买 nike

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

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

unexpected end of file while looking for precompiled header. Did you forge t to add '#include "pch.h"' to your source?

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

将每个项目的properties->c/c++->precompiled headers修改为

  • 预编译头=创建(/Yc)
  • 预编译头文件=pch.h
  • 预编译头输出文件 = $(IntDir)$(TargetName).pch

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

现在构建解决方案抛出

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forge t to add '#include "stdafx.h"' to your source?

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

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

最佳答案

预编译头是一个加速构建过程的特性,所以如果你在构建时遇到问题,你可以随时关闭预编译头(在整个项目的项目设置中选择“不使用预编译头”)和构建应该可以工作。

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

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

如果 .cpp 文件启用了“使用”选项,但找不到带有“预编译头文件”选项中设置的文件名的#include 语句,则会产生您收到的错误消息。

关于c++ - 从 `stdafx.h` 变为 `pch.h`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53122379/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com