9

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

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

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

最近我开始玩弄 C#,因为我决定用它为我的引擎开发一些基于 GUI 的工具(这比使用 C++ 和 Qt 或 wxWidgets 等外部库要容易得多)我了解到,在 C# 中,此类依赖项是使用“参考”设置的:

在此处输入图像描述

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

事实上,在我创建示例解决方案并以这种方式设置依赖项之后,一切正常,没有任何额外的配置,如“链接器输入”或其他东西。

我的问题是:这个选项究竟对 C++ 项目有什么作用?我对所有利润和潜在的权衡感兴趣。

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

4

1 回答 1

14

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

但这让很多 C++ 程序员感到困惑,他们认为它应该包含一些通常有用的东西。可能是因为它位于“通用属性”标题下。很多关于它的问题。

快进到 VS2010,一个未完成的版本。微软项目超过其预定发货日期的少数情况之一。他们有额外的 6 周时间来处理错误列表。但这还不够,本应更容易链接依赖项的功能实际上并未实现或禁用。

所以在 VS2012 中,他们决定以不同的方式来做这件事,并使 Add Reference 对原生 C/C++ 项目也有用。您总是选择一个项目引用,它需要是静态库或 DLL 项目。一个生成 .lib 文件的文件。它会自动告诉链接器链接该 .lib 文件。没有别的,它只是将 .lib 文件添加到链接器命令行。效果很好。

更新:为 VS2015 再次更改,它现在有一个 References 节点。右键单击它以添加对另一个项目的引用。

于 2015-04-11T14:57:10.047 回答