无法在 VS2017 中包含 rapidjson 库

Unable to include rapidjson library in VS2017

我正在尝试将 rapidjson 库包含在我的 VS 社区 2017 项目中。

在创建新项目时,我在以下位置尝试 including/adding 目录 rapidjson-master\include\rapidjson :

  1. 属性 -> 配置属性 -> C/C++ -> 常规 -> 附加包含目录。

  2. 属性 -> 配置属性 -> VC++ 目录 -> 包含目录。

无论哪种方式,当我尝试包含一个 rapidjson 相关文件时,VS 告诉我它找不到源文件。

所以,当我给出这个时:

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

我收到以下错误:

Error (active) E1696 cannot open source file "rapidjson/document.h"

Error (active) E1696 cannot open source file "rapidjson/writer.h"

Error (active) E1696 cannot open source file "rapidjson/stringbuffer.h"

对比信息:

Microsoft Visual Studio Community 2017

Version 15.6.3

如果您知道在 Visual Studio 中使用 rapidjson 的正确方法,请告诉我。

编辑:

rapidjson documentation 建议我们 “只需将 include/rapidjson 文件夹复制到系统或项目的包含路径”

看起来包含路径应​​该只是 rapidjson-master\include,但让我们从头开始。

  1. 克隆 rapidjson 存储库;在命令 window:

    中执行以下操作
    mkdir C:/ThirdParty
    cd C:/ThirdParty
    git clone https://github.com/Tencent/rapidjson.git
    

    用方便的目录代替 C:/ThirdParty

  2. 在 Visual Studio 中打开解决方案,然后在解决方案资源管理器中,select 使用 rapidjson 的项目并使用主菜单 PROJECT Properties 功能,或者右键单击在项目上和选项菜单中的 select 属性。这将显示属性对话框。

  3. Select C/C++对话框左侧列表中的常规。

  4. 现在在对话框的右侧,第一行应该是"Additional Include Directories"。编辑该行,在列表末尾添加 C:/ThirdParty/rapidjson/include

在花了一些时间试图找出为什么它不包括外部库之后,我终于找到了我的解决方案。

当我将路径添加到 additional include directories 时,我是在以下配置下进行的:

Configuration : Debug

Platform : x64.

但是,在我的VS2017中,每次新建项目时,compilation/run设置的默认配置如下:

Configuration : Debug

Platform : x86

我的问题背后的主要原因是配置项目和编译项目之间的平台不匹配。所以,我想在这种情况下检查平台和配置是否相同总是更好。

附加信息:(关于评论和对这个问题的其他回答)

包含的目录是rapidjson-master\include\rapidjson还是rapidjson-master\include\都没有关系。在前者中,我们将文件包含为 #include "document.h",而在后者中,它将是 #include "rapidjson/document.h".

对于那些仍然有这个问题的人,经过一段时间的调试我意识到发生错误的原因是因为在远程项目目录中找不到该文件 - 即使它存在并且被正确包含在您的本地 Windows 项目中。

为了使远程项目与第 3 方 headers 正确编译,必须从您的 Windows 目录复制它们。

我是这样解决问题的:

  • 首先,我在 Solution Explorer window 中将 rapidjson header 文件添加到我的项目中。似乎必须将它们显式包含在那里,以便 Visual Studio 将文件复制到您的远程项目目录。为了维护 rapidjson 包含目录的目录结构,我在适当的 "filters"(文件夹图标)中添加了 headers - 请参见下面的屏幕截图(由于它是公司项目,项目名称被审查了):

  • 然后,我将编写#include 语句的方式从 #include "rapidjson\document.h" 更改为 "rapidjson/document.h"(即使用 Linux 文件路径语法)。

  • 最后,我重建了项目。它成功地将 header 文件复制到远程项目,我的源文件现在可以 "find" 它们了。