视觉c ++:#include来自同一解决方案中其他项目的文件


113

我正在使用Visual C ++开发游戏。我在单独的项目中有一些组件,并设置了项目依赖项。如何#include来自其他项目的头文件?我不知道如何使用另一个项目中的类。

Answers:


199

编译器设置

在您要#include 另一个项目的头文件的项目中,需要将头文件的路径添加到项目配置的“ 其他包含目录”部分中。

要访问项目配置:

  1. 右键单击该项目,然后选择“属性”。
  2. 选择配置属性-> C / C ++->常规。
  3. 在“其他包含目录”下设置路径。

如何包含

包含头文件,只需在代码中编写以下内容:

#include "filename.h"

请注意,您无需在此处指定路径,因为您已经将目录包括在“其他包含目录”中,因此Visual Studio将知道在哪里寻找它。

如果您不想在项目设置中添加每个头文件的位置,则可以只包含一个目录,直到一个点,然后相对于该点#include:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

设置链接器

如果使用静态库(即.lib文件),则还需要将库添加到链接器输入中,以便在链接时可以链接符号(否则,您将得到未解析的符号):

  1. 右键单击该项目,然后选择“属性”。
  2. 选择配置属性->链接器->输入
  3. 在其他依赖项下输入库。

6
我想说的是,经过一个上午阅读有关SO的有关此问题的答案之后,您遇到的最清晰,最全面的内容就是我遇到的。做得好,谢谢!
大卫·霍尔

9
匿名用户建议:“当包含库的路径时,请确保如果路径中有空格,请在引号中输入它们”。将其添加为评论(如果有帮助的话)。
iDev 2012年

2
包含静态库的另一种方法是,在解决方案的“项目依赖项”中,将项目配置为要链接的静态库的依赖项。花了我很长时间才弄清楚为什么我的一个项目正确链接了而另一个不是-这就是原因。
Stuart Wood

3
我想指出的是,在其他项目的源文件目录中使用“其他包含目录”可能是一个糟糕的主意。另一个项目可能具有相同名称的文件(如果您使用的是每个文件的预编译头,则很有可能)。就个人而言,我更喜欢添加项目源文件的父文件夹,因此您至少可以指定自己,例如#include "proj2\include.h"。每个解决方案有多个项目似乎非常针对NET语言,因为它们的用法非常不同。还没有找到一种解决C ++项目的好方法。
Deji 2014年

18
这有点伪劣。VS可以自动完成很多工作。很难相信,与对路径进行硬编码相比,没有更好的解决方案-项目依赖项设置或类似内容可能不错。
Cookie

4

#include与项目无关-它只是告诉预处理器“将头文件的内容放在这里”。如果您提供的路径指向正确的位置(可以是相对路径,例如../your_file.h),则将正确包含该路径。

但是,您将必须了解库(静态/动态库)以使此类项目正确链接-但这是另一个问题。


3

由于两个项目都在同一个解决方案下,因此存在一种包含文件和链接器的简单方法,如https://docs.microsoft.com/zh-cn/cpp/build/adding-references-in-visual-cpp-项目?view = vs-2019

  1. 包含可以写在相对路径(Eg #include "../libProject/libHeader.h")中。
  2. 对于链接器,右键单击“参考”,单击“添加参考”,然后选择另一个项目。

不错,很简单,但是太糟糕了,在包含标头的任何地方都需要相对路径。
yoyo

2

您需要在项目属性中设置标头的路径,以便编译器在尝试查找标头文件时在此处查找。我不记得确切的位置,但是仔细查看Project属性,您应该会看到它。


位置可以在“属性”>“ C / C ++”>“常规”>“其他包含目录”下。
穆斯塔法·凯末尔

0

尝试避免在#include指令中使用完整的路径引用,无论它们是绝对的还是相对的。而是在项目设置中添加其他项目的include文件夹的位置。必要时,仅在路径引用中使用子文件夹。这样一来,无需更新代码即可更轻松地移动内容。


0

扩展@Benav的答案,我的首选方法是:

  1. 将解决方案目录添加到您的包含路径:
    • 在解决方案资源管理器中右键单击您的项目
    • 选择属性
    • 从下拉列表中选择所有配置和所有平台
    • 选择C / C ++>常规
    • 添加$(SolutionDir)到其他包含目录
  2. 为您要使用的每个项目添加引用:
    • 在解决方案资源管理器中右键单击项目的参考
    • 选择添加参考...
    • 选择您要参考的项目

现在,您可以像这样包含所引用项目的标题:

#include "OtherProject/Header.h"

笔记:

  • 假设您的解决方案文件存储在每个项目的上一个文件夹中,这是使用Visual Studio创建项目时的默认组织。
  • 现在,您可以包括相对于解决方案文件夹的路径中的任何文件,这可能不是所希望的,但是为了简化方法,我对此表示满意。
  • 步骤2对于#includes 不是必需的,但它可以设置您可能想要的正确构建依赖关系。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.