自定义预编译标头会导致编译错误

时间:2019-11-20 18:29:06

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

由于当前项目中的编译时间长,我试图将预编译的头文件引入项目。我有一个包含主要功能的主项目,所有实际代码都在DLL项目中(它们链接在一起。)我将预编译的头文件命名为“ vpch.h”,并创建了一个包含vpch.h的vpch.cpp。我正在使用Visual Studio 2017,因此我进入了vpch.cpp的属性并选择了创建。然后,我在所有cpp文件中首先添加了vpch.h。所有文件都设置为使用预编译头,并引用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?

我无所适从,因为我已经看了很多教程,却找不到原因。以及Google上弹出的大多数问题都是人们不小心包括了预编译的标头。

我唯一的想法是,也许在属性中要求预编译头文件名的部分中,我要做的不只是放置“ vpch.h”,还有可能是确切的文件位置?对此,我们将给予任何帮助。

编辑

从进一步的调试看来,除一个cpp文件外,所有文件都将抛出错误。不会出错的是与vpch.h完全相同的文件夹中的错误。因此,不能只写#include "vpch.h"且必须写类似"../vpch.h"的文件,我可以写#include <vpch.h>,现在我将尝试尝试,但不确定是否会有帮助。

1 个答案:

答案 0 :(得分:0)

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

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