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

rlb*_*ond 110 c++ projects-and-solutions visual-studio

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

Leo*_*Hat 197

编译器的设置

在要从另一个项目中#include头文件的项目中,您需要将头文件的路径添加到项目配置中的Additional Include Directories部分.

要访问项目配置:

  1. 右键单击该项目,然后选择"属性".
  2. 选择Configuration Properties-> C/C++ - > General.
  3. 在Additional Include Directories下设置路径.

如何包括

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

#include "filename.h"
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要在此处指定路径,因为您已在"包含其他目录"中包含该目录,因此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
Run Code Online (Sandbox Code Playgroud)

设置链接器

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

  1. 右键单击该项目,然后选择"属性".
  2. 选择Configuration Properties-> Linker-> Input
  3. 在Additional Dependencies下输入库.

  • 这有点粗制滥造.VS可以自动完成这么多.与硬编码路径相比,很难相信没有更好的解决方案 - 项目依赖性设置等可能会很好. (15认同)
  • 匿名用户有一个建议是,"当你包含库的路径时,如果路径有空格,请确保在引号中输入它们".添加它作为评论,如果它可以帮助任何人. (9认同)
  • 我可以这么说,经过一天早上在SO上阅读关于这个主题的答案之后,我发现了最明确和最全面的问题.干得好,谢谢! (6认同)
  • 我想指出,在其他项目的源文件目录中使用"Additional Include Directories"可能是一个糟糕的主意.另一个项目可能具有相同名称的文件(很可能,如果您使用每个文件的预编译头文件).就个人而言,我更喜欢添加项目源文件的父文件夹,因此您至少可以指定自己,例如`#include"proj2\include.h"`.每个解决方案有多个项目似乎非常针对.NET语言,因为它们的使用方式截然不同.然而,找到克服C++项目的好方法. (3认同)
  • 包含静态库的另一种方法是在解决方案的"项目依赖项"中,将项目配置为要链接到的静态库的依赖项.我花了很多时间才弄清楚为什么我的一个项目正确链接而另一个则不是 - 这就是原因. (2认同)
  • 我似乎无法理解的是,如果它没有`.lib`和`.dll`,你如何实际告诉链接器定义在哪里(另一个项目`.cpp`)?现在我有一个链接器错误,链接器找不到定义,因为我不知道在"附加库"中放什么 (2认同)
  • @Cookie,Shoddy 是轻描淡写的。.NET 项目以更优雅的方式做到这一点。CodeWarrior 是一款现已停产的 90 年代产品,它允许您在直观的图形界面中配置要搜索的子项目及其顺序。经典的 Macintosh 及其软件远远领先于时代。 (2认同)

yoy*_*oyo 11

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

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

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

#include "OtherProject/Header.h"
Run Code Online (Sandbox Code Playgroud)

笔记:

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


Ben*_*nav 8

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

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