Visual Studio解决方案依赖项

时间:2017-05-18 20:08:26

标签: c++ visual-studio external-dependencies

我在一个拥有基于数百个Visual Studio解决方案(主要是C ++)的产品套件的组织中工作。其中一些解决方案生成了其他解决方案使用的库,还有一个包含多个模块共享的标头的通用“include”文件夹。

问题在于依赖关系未在任何地方明确声明,构建系统通过指定线性构建顺序来解析依赖关系,以确保在正确的时间构建依赖模块。这适用于构建系统,但在尝试处理具有许多直接和间接外部依赖性的组件时,使开发人员处于不利地位。例如,我可能想要编辑其中一个库项目或共享头文件,然后构建所有受影响的模块,而不必提前知道哪些受影响。另一个用例涉及在从TFS进行全新拉取之后构建模块,并且必须首先构建模块而不必构建整个系统。

我想知道是否有任何可用的工具可以自动生成用于构建大型项目的依赖项生成。我考虑过创建一些非常大的解决方案来封装其他解决方案,但这看起来非常笨拙和笨拙。此外,我不喜欢让开发人员手动指定依赖项的想法,因为它可能容易出错,特别是对于如此庞大的代码库。几年前我和scons一起工作,非常喜欢它解析源文件并自动发现所有依赖项依赖项的方式。今天有什么可以用Visual Studio解决方案做同样的事情吗?

这不是Visual Studio: how to handle project dependencies right?

的副本

我需要强调我试图解决的问题的严重性。这是一个非常大的现有代码库。在主目录中有几百个子文件夹,每个子文件夹包含一个或多个VS解决方案(不是项目)。反过来,每个解决方案都包含一个或多个项目。正如我之前所说,我不是试图在解决方案中的几个项目之间建立依赖关系。问题比这要大得多。我正试图找到一种方法来建立解决方案本身之间的依赖关系(数百个)。例如,一个解决方案可能包含一些项目,这些项目生成用于安全性的库,其他项目用于通信等。例如,可能有许多使用通信库的解决方案。所以基本上我正在尝试创建一个有数百个节点和可能数万个边缘的有向循环图。

2 个答案:

答案 0 :(得分:0)

您可以使用cmake(https://cmake.org/)。有了它,您可以指定要构建的多个库和应用程序。配置完成后,您可以修改项目,构建将只更新依赖项目。 Cmake还提供了一个可视工作室生成器,以便您可以继续使用该IDE。

可能的一种不足之处在于,要配置,您必须为每个项目(库或可执行文件)明确指定必须链接的项目以及必须包含的文件夹。有一些方法可以定义一些全局包含和链接,但使用将取决于您的问题。

答案 1 :(得分:0)

VS跟踪依赖关系(通过解析源文件)。在任何其他构建工具中,您仍然必须以某种方式指定链接项目A.exe您需要使用{ {1}}。

如果您使用较新的VS版本,则只需将lib的引用添加到您的exe / dll项目中。如果手动添加项目依赖项,则很可能应该将它们全部删除,尤其是确保不要使静态lib项目相互依赖。 VS允许你这样做(例如,如果构建一个库生成一些另一个静态库使用的源文件),但通常这些不应该有任何依赖关系,这允许VS通过并行构建它们来优化构建

例如,通常你可以使用某种Base.lib,然后是System.lib和Graphics.lib。所有这些都是App.exe的用户。 System.lib使用Base.lib中的代码,Graphics.lib使用System.lib和Base.lib中的代码。因此,依赖关系链很明显,你可以在VS中设置它们,这是一个错误!在VS中这样的情况下,您应该使这4个库独立,并且只有App.exe应该依赖于所有这些库(例如,它应该引用所有这些库)。 VS将弄清楚这些项目的正确依赖性是什么。

关于Cmake案例:它只是生成VS项目和解决方案,如果你使用VS那么cmake不能比VS本身做得更多。