在团队环境中如何管理大型C++依赖项?

5

背景

在我的职业生涯中,我惊讶地发现有很多项目在Visual Studio中编译和执行时都面临着真正的挑战。问题的根源通常是由于缺少依赖项、缺乏文档、损坏的项目引用等。

为了避免这些头痛,我尝试自动化项目/解决方案,使得:

  1. 在开发人员机器上编译项目时,运行时环境会自动设置(例如使用批处理脚本导入缺失的Windows注册表键)
  2. 编译项目时,正确的依赖关系会自动检索(在构建机器和开发机器上)

问题

到目前为止,我在这种方法上取得了相当大的成功。然而,最近我接手了一个本地C++项目,它依赖于Microsoft Windows SDK。在编译时,该项目使用Windows环境变量来定位缺失的依赖项(例如Microsoft Windows SDK)。

我知道使用环境变量是过去的做法。但是,通过依靠软件开发人员配置开发环境:

  • 您假设他们会正确配置环境
  • 开发人员在配置时浪费时间,而他们的时间本应该用于开发

我不想辩论让开发人员配置开发环境的好处,而是想知道:

鉴于今天存在的技术(例如TFS),处理C ++项目中的大型依赖项(例如Windows SDK)的可靠且可重复的方法是什么?

潜在解决方案

  1. 继续使用环境变量
    • 优点:一旦安装了依赖项,构建机器编译项目非常容易
    • 缺点:您必须花时间记录以确保可以从头开始配置构建机器(例如步骤1:安装依赖项A,步骤2:安装依赖项B等)
    • 缺点:您正在依赖“神奇”的环境变量指向正确的目标。
    • 缺点:开发人员在应该开发时浪费时间进行配置
  2. 将依赖项检入TFS
    • 优点:一切都保存在一个集中的位置
    • 优点:源代码控制按设计保留历史记录
    • 优点:在某种程度上,源代码控制使事情自我记录
    • 缺点:在构建机器上编译现在需要更长的时间,因为构建机器工作区必须反复从TFS检索Windows SDK
  3. 其他?

背景信息

  • 编程语言:非托管C++
  • 源代码控制:TFS 2012
  • 依赖项:
    • Microsoft Windows SDK(约416Mb)
    • 内部库
  • 我对如何管理/配置TFS构建机器的知识有限。

参考资料


你是否考虑过保持现状,提供工具来配置/检测错误配置?例如,提供一个脚本来检测SDK是否可以找到,并生成用户友好的错误消息:“安装Windows SDK和/或设置环境变量XXX指向正确的路径”。 - David Rodríguez - dribeas
@DavidRodríguez-dribeas:嗨,David。谢谢您抽出时间回复。是的,这个选项也在考虑中。 - Pressacco
1个回答

1
我记得在一家安全公司工作时,团队有一个脚本,通常在你点击编译时会自动为你复制所有依赖项到一个特定的文件夹中。这是在 MFC 项目的构建属性中实现的,但当时对我来说很难理解。
这个参考资料看起来非常有帮助,谢谢。

我过去曾经使用过这个,虽然它需要更多的硬盘空间,但是能够从存储库中仅仅检出项目,运行一个脚本,下载所有依赖项,构建并打包成一个步骤是非常棒的。 - David Rodríguez - dribeas
现在我们有实习生,他们花费所有时间学习Python并编写脚本来管理源代码或项目所需的任何内容,例如配置新机器。我从未有过这样的经历,但Python似乎是非常强大的工具。 - aah134

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