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

Pre*_*cco 5 c++ build-automation tfsbuild dependency-management tfs2012

背景

在我的职业生涯中,我惊讶于有多少项目我在Visual Studio中编译和执行项目是一个真正的挑战.问题的根源通常是由于:缺少依赖性,缺少文档,缺少项目引用等.

为了避免这些麻烦,我尝试自动化项目/解决方案,以便:

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

问题

到目前为止,我采用这种方法取得了相当大的成功.但是,我最近获得了一个依赖于Microsoft Windows SDK的本机C++项目.在编译时,项目使用Windows环境变量来查找缺少的依赖项(例如Microsoft Windows SDK).

我知道使用环境变量是以往的工作方式.但是,依靠软件开发人员来配置开发环境:

  • 您假设他们将正确配置环境
  • 当他们的时间可以更好地用于开发时,开发人员正在浪费时间进行配置

我不想讨论让开发人员配置开发环境的优点,而是我想知道:

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

潜在的解决方案

  1. 继续使用环境变量
    • 高级:一旦安装了依赖项,构建机器就很容易编译项目
    • Dis:您必须花时间记录以确保您可以从头开始配置构建机器(例如,步骤1:安装依赖关系A,步骤2:安装依赖关系B等)
    • Dis:您依靠魔术环境变量来指向正确的目标.
    • Dis:开发人员在开发时会浪费时间进行配置
  2. 检查依赖关系到TFS
    • 高级:一切都保存在一个集中的位置
    • 高级:通过设计,源代码控制保持了历史
    • 高级:从某种意义上说,源代码控制使事情自我记录
    • Dis:由于构建机器工作区必须从TFS重复检索Windows SDK,因此在构建机器上进行编译现在需要相当长的时间
  3. 其他?

CONTEXT

  • 编程语言:非托管C++
  • 源控制:TFS 2012
  • 依赖关系:
    • Microsoft Windows SDK(~416Mb)
    • 在内部图书馆
  • 我对如何管理/配置TFS构建机器知之甚少.

参考

aah*_*134 1

我记得在一家安全公司工作时,团队有一个脚本,通常会在您点击编译后立即将所有依赖项复制到您的特定文件夹中。它在 MFC 项目的构建属性中,但是当时令我感到困惑。

该参考文献似乎很有帮助,谢谢