Visual Studio:如何正确处理项目依赖关系?

9
我正在编写一份程序(使用C++语言),该程序需要多个VS项目,而我希望将它们放在同一个VS解决方案中。我正在使用Visual Studio 2010。
这是我的期望架构:我正在使用第三方库(A)作为我的项目,我已经拥有了所有的头文件和.lib文件,并且我已经使用源代码进行了编译。
在这个库的基础上,我正在编写自己的类和函数。这就是我的项目(B)。
然后我想为用户开发两个接口:一个命令行接口(C1)和一个GUI接口(C2),它们使用了在(B)中定义的类和函数。
A <-- B <-- C1
        <-- C2

我是新手,不知道如何正确处理这些依赖项。我应该使用项目依赖项(在解决方案属性中)还是引用(在项目属性中)?实际上,我不确定依赖项和引用具体的作用。
我应该将B编译成某个.lib库,还是做其他事情?如果我这样做,只需要将B.lib链接到我的C1和C2项目中,或者还应该链接A.lib(换句话说,A.lib的内容是否以某种方式包含在B.lib中?)当然,我希望能够很好地处理依赖项,以便始终使用每个项目的最新版本。
有一个好方法吗? 提前感谢您,并祝您周末愉快 :)

你的方法对我来说很好,C1/C2依赖于B,B依赖于A。如果你能制作b.lib会更好。将代码移入“模块”可以简化解决方案;项目依赖关系使“始终使用每个项目的最新版本”成为可能。 - billz
谢谢。 所以依赖关系是用于构建顺序的,我猜测。 那么我应该使用引用吗? - Maxx
@Maxx 是的,项目依赖关系用于推断构建顺序(无法手动更改)。至于引用和依赖项之间的区别,这篇Visual C++ Team Blog entry解释了在Visual Studio 2010中实现的两个概念。 - IInspectable
2个回答

3
是的,使用项目引用。
这里是微软官方回答的链接。虽然该页面讨论的是.NET,但对于本地项目也几乎相同。
TL;DR版本:
项目引用的优点:
  1. 它们适用于加载解决方案和项目集的所有开发工作站。这是因为在项目文件中放置了一个项目全局唯一标识符(GUID),它在当前解决方案的上下文中唯一标识被引用的项目。
  2. 它们使Visual Studio .NET构建系统能够跟踪项目依赖关系并确定正确的项目构建顺序。
  3. 它们避免了特定计算机上缺少引用程序集的可能性。
  4. 它们自动跟踪项目配置更改。例如,当您使用调试配置进行构建时,任何项目引用都会引用由所引用项目生成的调试程序集,而在发布配置中则引用发布程序集。这意味着您可以在项目之间自动切换从调试到发布构建而无需重置引用。
  5. 它们使Visual Studio .NET能够检测和防止循环依赖。
这里还有一篇关于VS 2010中的项目设置更改的好文章,也指出引用优于项目依赖关系。实际上,该文章还说VS2010解决方案转换器会自动检测项目依赖关系并将其更改为项目引用。

你还需要将项目添加到包含目录中吗?我本以为项目引用会处理这个问题,但是我在同一个解决方案中将库项目A引用了库项目B,但是A无法通过包含指令找到B的头文件。 - undefined

2

我工作的公司的政策是使用项目引用。

项目引用更有用,因为它们将给定项目所依赖的项目的信息与该项目一起保存。如果您需要将该项目添加到新解决方案中,则无需返回旧解决方案文件以查找给定项目所依赖的项目。


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