【问题标题】:Unable to use Precompiled headers in visual studio无法在 Visual Studio 中使用预编译头文件
【发布时间】:2021-07-30 20:13:18
【问题描述】:

我看到了几个讨论这个话题的问题,但他们的解决方案似乎都不适用于这里。我有几个库,我不会在每次构建项目时都编译它们,所以我创建了“b5pch.h”和 b5pch.cpp”文件。

//b5pch.h
#pragma once

#include <iostream>
#include <memory>
#include <utility>
#include <algorithm>
#include <functional>

#include <sstream>
#include <string>
#include <vector>

#ifdef B5_PLATFORM_WINDOWS
    #include <Windows.h>
#endif
//b5pch.cpp
#include "b5pch.h"

在属性中,我将每个 cpp 文件的预编译头设置为 Use(/Yu),如下所示:

对于 b5pch.cpp,它设置为 Create(/Yc)

之后,我在每个 cpp 文件的开头添加了 #include "b5pch.h(我只有两个,不包括 b5pch.cpp),但是当我尝试构建项目时,我收到两个错误,说的完全一样

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

【问题讨论】:

  • 您需要在源文件中#include "b5pch.h" 需要该组标头并使用相同的选项进行构建。我建议不需要b5pch.cpp 文件,但取决于您。如果您在标头中所做的只是包括标准标头或 Microsoft 标头,那么您很可能无论如何都不会使用预编译标头获得太多收益。顺便说一句,在你有需要的证据(例如,长的构建时间,以及预编译的头文件可以减轻这种情况的证据)之前,你可能会过早地使用预编译的头文件。
  • 您的配置看起来正确,尽管您只显示了一半。重要的是每个文件的预处理器宏也必须保持一致,最重要的是,如果您使用创建+使用策略(并且您是),则与 pch 构建器文件的预处理器定义一致。我也会在那里检查。当我这样做时,我的做法与您几乎相同:全局“使用”并指定 pch 标头,然后将单个 pch cpp 文件更改为“创建”,将 pch 标头指定为“通过”摄取。跨度>

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


【解决方案1】:

好的,我已经解决了这个问题。当我在我的 cpp 文件中包含 b5pch.h 时,我是这样做的: #include ../b5pch.h 因为它们位于不同的目录中。 当我将 pch 文件移动到同一目录中并且我只写了#include b5pch.h 时,就没有更多错误了。我不希望它们位于同一个文件夹中,所以我将它们移出,但在项目属性->附加包含目录中,我添加了“src”,因此即使它们也可以在我的 cpp 文件中使用#include b5pch.h不在同一个文件夹中。

【讨论】:

  • 这是有用的知识,感谢您回答自己的问题。 +1
猜你喜欢
  • 2021-07-10
  • 2012-07-28
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2011-01-11
  • 2019-07-31
相关资源
最近更新 更多