MSVC Dependencies与References的区别

12

我一直使用Visual Studio Dependencies选项来确保,在构建我的C++项目时,任何依赖的LIB或DLL项目也都能被构建。然而,我听到有人提到“引用”,想知道在VS 2010即将到来时,我是否应该改变做法。

使用引用来处理依赖关系是否有任何好处,还是前者只是.NET特性? 我目前正在使用VS2008。

3个回答

20

我更喜欢使用引用,因为自从2005年VS引入了非托管C++后,它们就已经存在了。对于非托管C++开发人员来说,区别在于引用存储在.vcproj文件中,而项目依赖关系存储在.sln文件中。

这个区别意味着当你在不同的解决方案中重用项目时(我经常这样做),你不需要重新定义项目之间的关系。

Visual Studio非常聪明,它在建立引用关系时不会过多地依赖项目路径。


1
我不知道原来你可以在本地C++项目中引用其他本地C++项目。我认为这比“项目依赖关系…”对话框更好地描述了依赖关系的接口(唯一的缺点是您必须为每个项目单独打开它,但这只是小小的挑剔)。 - Michael Burr
1
+1:在解决方案中引用其他项目时,如果.vcproj文件有小的更改而不是.sln文件有大的更改,则对版本控制更友好。 - quamrana
1
这是一个很好的答案,因为它还展示了相反的情况--你可以有一个依赖构建顺序而不链接依赖项。例如,我正在创建一个DLL,它将按需加载而不是立即与EXE一起加载。 - Wheezil

1

在VS2008中,项目依赖于静态库时,会自动链接正确的配置(Debug|Release)。但是看起来随着转向msbuild,VS2010失去了这种能力。唉。


它并没有丢失,在 Visual Studio 2015 中点击引用后,您可以在属性窗口中更改这些选项。 - codekiddy

0
“引用”是.NET的东西,不适用于本地C++。它们与依赖项目不同。解决方案中的依赖项是必须在另一个项目之前(或之后,取决于依赖关系的方向)构建的项目。
引用是包含项目中使用的类型的程序集。本地C++项目中类似的东西可能是项目使用的 include 文件和链接的 .lib 文件(即使这些项目没有在解决方案的其他步骤中构建,本地C++ 项目也会“消耗”这些文件)。

6
参考文献在本地C++中同样适用,与托管版本基本相同。它强制项目"依赖"(将始终首先构建引用的项目),并将项目的输出添加到链接器中。这意味着在链接时无需调整库路径和名称。 - Grant Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接