首页 > 解决方案 > 自定义预编译头文件导致编译错误

问题描述

我正在尝试将预编译的头文件引入我的项目,因为我的项目现在编译时间很长。我有一个包含主函数的主项目,所有实际代码都在 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 文件之外的所有文件都在抛出错误。不引发错误的是存在于与 vpch.h 完全相同的文件夹中的那个。所以文件不能只写,必须写出我能写#include "vpch.h"的东西,我现在要试试,但我不确定这会有所帮助。"../vpch.h"#include <vpch.h>

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

解决方案


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

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


推荐阅读