c++ - 自定义预编译头导致编译错误

标签 c++ c visual-studio-2015 visual-studio-2017 precompiled-headers

由于我的项目现在的编译时间很长,我正在尝试将预编译头引入到我的项目中。我有一个包含主函数的主项目,所有实际代码都在 DLL 项目中(它们链接在一起)。我将预编译头命名为“vpch.h”,并创建了一个包含 vpch.h 的 vpch.cpp。我使用的是 Visual Studio 2017,因此我进入 vpch.cpp 的属性并选择“创建”。然后我将 vpch.h 添加为所有 cpp 文件中的第一件事。所有文件都设置为使用预编译头并引用 vpch.h 每个 CPP 文件都会引发错误:

Error C1010 unexpected end of file while looking for precompiled header. 
            Did you forget to add '#include "vpch.h"' to your source?

我不知道该怎么办,因为我已经遵循了很多教程,但找不到原因。谷歌上出现的大多数问题都是人们不小心包含了预编译头。

我唯一的想法是,也许在属性中要求预编译头名称的部分中,我需要做的不仅仅是放置“vpch.h”以及确切的文件位置?对此的任何帮助都非常感谢。

编辑

从进一步调试来看,除了一个 cpp 文件之外,所有 cpp 文件都抛出错误。不会引发错误的文件是与 vpch.h 位于同一文件夹中的文件。所以文件不能只写#include "vpch.h"并且必须写类似 "../vpch.h" 的内容我可以写#include <vpch.h>我现在打算尝试一下,但我不确定这会有帮助。

最佳答案

问题在于每个 CPP 文件与预编译头不在同一文件夹中。 因此,如果您使用在不同文件夹中包含不同类的文件结构,则使用 #include "../../vpch.h"实际上会失败。您必须将根文件夹添加到其他包含目录中,然后使用 #include <vpch.h>对于所有文件。我无法告诉你为什么使用 #include "../../vpch.h"没工作。在我看来,它的失败似乎违反直觉。

这可能是因为它在与您引用它的文件相同的文件夹中搜索预编译头。但是,这个答案将作为解决方案。

关于c++ - 自定义预编译头导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58961109/

相关文章:

c++ - 如何为 parallel_invoke 设置进度条?

c++ - ofstream 不适用于 Windows 7 隐藏文件

c - 返回后的函数 kepps(递归 C)

c - 从文件中读取数组大小

visual-studio-2015 - 更新 Visual Studio 2015 扩展最终被禁用

angular - "tsc.exe"以代码 1 退出

c++ - 正则表达式替换文件扩展名前缀放置不起作用 - 替换匹配项

c++ - 在派生类声明中使用 "Public"?

c++ - 插入 std::vector 时 std::unique_ptr 的正确用法是什么

c - 函数中的malloc()结构,结束程序之前为free()