在 Visual Studio 中添加对 C++ 项目的引用会产生什么后果?

What are consequences of adding references to C++ project in Visual Studio?

我使用 Visual Studio 已经有一段时间了,主要是为 C++ 开发。我经常需要创建包含多个模块(项目)的解决方案 - 例如实用程序库,它由几个 .dll 文件组成。

当需要一个模块 (A) 使用另一个模块 (B) 时,有标准模式:

  1. 包括必需的 header.
  2. Link 从 B 输出库文件(例如,在 VS 中:Project Config -> Linker -> Input -> Additional Dependencies -> 'B.lib').
  3. [可选]设置正确的构建顺序(因此 B 在 A 之前构建)。

最近我开始使用 C#,因为我决定用它为我的引擎开发一些 GUI-based 工具(它 比使用 C++ 容易 并且外部库,如 Qt 或 wxWidgets)。我了解到,在 C# 中,此类依赖项是使用 'References':

设置的

当我发现这个选项也适用于 C++ 项目时,我感到非常惊讶!

确实,在我创建示例解决方案并以这种方式设置依赖项之后,一切正常,没有任何额外的配置,如 "Linker input" 或其他东西。

我的问题是究竟此选项对 C++ 项目有何作用?我对所有利润和潜力感兴趣 trade-offs.

我已经知道,它会导致链接其他项目的输出设置为依赖项。还要别的吗?也许引用模块之间存在一些运行时依赖关系?它如何影响生成的输出?

最初 意味着仅用于 C++/CLI 项目。并做了与添加对 C# 项目的引用完全相同的事情,您选择了让项目编译所需的 .NET 引用程序集。

但这让很多 C++ 程序员感到困惑,他们认为它应该包含一些普遍有用的东西。可能是因为它在 "Common Properties" 标题下。关于它的很多问题。

快进到 VS2010,一个未完成的版本。微软项目超过预定交付日期的少数情况之一。他们有额外的 6 周时间来完成 bug-list。但这还不够,本应使 link 依赖项更容易的功能被 not actually implemented 或禁用。

因此,在 VS2012 中,他们决定以不同的方式进行操作,并使添加引用对本机 C/C++ 项目也很有用。你总是选择一个项目引用,它需要是一个静态库或一个 DLL 项目。生成 .lib 文件的一个。它会自动告诉 linker link 那个 .lib 文件。没有别的,它只是将 .lib 文件添加到 linker 命令行。效果不错。

更新:针对 VS2015 再次更改,它现在有一个 References 节点。 Right-click 添加对另一个项目的引用。