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

问题描述 投票:0回答:6

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

c++ visual-studio projects-and-solutions
6个回答
224
投票

编译器设置

在您想要 #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 文件),您还需要将库添加到链接器输入,以便在链接时可以链接符号(否则您将得到未解析的符号)。

添加 another 项目作为引用会将其添加到链接器输入(项目属性 -> 链接器 -> 输入 -> 其他依赖项)。添加参考:

  1. 在项目下的解决方案资源管理器中,有一个引用节点。右键单击它,然后选择添加引用...
  2. 选择另一个项目,然后单击“确定”。

现在构建您的项目将在必要时触发构建另一个项目,并且链接器将能够解析外部符号。


11
投票

由于两个项目都在相同的解决方案下,因此包含文件和链接器有一种更简单的方法,如https://learn.microsoft.com/en-us/cpp/build/adding-references-in-visual-中所述cpp-projects?view=vs-2019 :

  1. 包含可以写在相对路径中(例如
    #include "../libProject/libHeader.h"
    )。
  2. 对于链接器,右键单击“References”,单击“Add Reference”,然后选择其他项目。

11
投票

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

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

现在您可以包含引用项目中的标题,如下所示:

#include "OtherProject/Header.h"

备注:

  • 这假设您的解决方案文件存储在每个项目的上一个文件夹中,这是使用 Visual Studio 创建项目时的默认组织方式。
  • 您现在可以包含相对于解决方案文件夹的路径中的any文件,这可能并不理想,但为了方法的简单性,我对此表示同意。
  • 第 2 步对于
    #include
    来说不是必需的,但它设置了您可能想要的正确的构建依赖项。

4
投票

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

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


2
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.