Как вы управляете большими зависимостями C ++ в командной среде?

ИСТОРИЯ

В течение своей карьеры я был удивлен тем, сколько проектов я видел, когда компиляция и выполнение проекта в Visual Studio является реальной проблемой. Источником проблемы обычно является отсутствие зависимостей, отсутствие документации, неработающие ссылки на проект и т. Д.

Чтобы избежать этих головных болей, я стараюсь автоматизировать проекты / решения таким образом, чтобы:

  1. среда выполнения автоматически настраивается, когда проект компилируется на машине разработчика (например, используйте пакетные сценарии для импорта отсутствующих ключей реестра Windows)
  2. при компиляции проекта автоматически извлекаются правильные зависимости (как на машине сборки, так и на машинах разработчика)

ПРОБЛЕМА

На сегодняшний день я добился значительных успехов с этим подходом. Однако недавно мне вручили собственный проект C ++, который зависит от Microsoft Windows SDK. Во время компиляции проект использует переменные среды Windows для поиска недостающих зависимостей (например, Microsoft Windows SDK).

Я понимаю, что использование переменных среды - это то, как раньше делалось. Однако, полагаясь на разработчика программного обеспечения для настройки среды разработки:

  • вы предполагаете, что они правильно настроят среду
  • разработчик тратит время на настройку, тогда как его время может быть лучше потрачено на разработку

Я не хочу обсуждать достоинства того, чтобы разработчик настраивал среду разработки, я хотел бы знать:

Учитывая существующую сегодня технологию (например, TFS), каков надежный и повторяемый подход к обработке больших зависимостей (например, Windows SDK) для проектов C ++ в командной среде?

ВОЗМОЖНЫЕ РЕШЕНИЯ

  1. continue to use environment variables
    • Adv: once the dependencies are installed, it is very easy for the build machine to compile projects
    • Dis: вам нужно потратить время на документирование, чтобы убедиться, что вы можете настроить машину сборки с нуля (например, шаг 1: установить зависимость A, шаг 2: установить зависимость B и т. Д.)
    • Дис: Вы полагаетесь на магические переменные среды, которые указывают на правильную цель.
    • Dis: разработчик тратит время на настройку, когда им следует разрабатывать
  2. check dependencies into TFS
    • Adv: everything is kept in one centralized location
    • Adv: изначально система контроля версий хранит историю
    • Adv: в некотором смысле система контроля версий делает вещи самодокументированными
    • Dis: Компиляция на машине сборки теперь занимает значительно больше времени, поскольку рабочая область машины сборки должна многократно извлекать Windows SDK из TFS.
  3. Другое?

КОНТЕКСТ

  • Язык программирования: неуправляемый C ++
  • Контроль версий: TFS 2012
  • Dependencies:
    • Microsoft Windows SDK (~416Mb)
    • в домашних библиотеках
  • У меня ограниченные знания о том, как администрировать / настраивать машину сборки TFS.

ССЫЛКИ


person Pressacco    schedule 19.06.2013    source источник
comment
Думали ли вы, что оставить все как есть и предоставить инструменты, которые помогут настроить / обнаружить неправильную конфигурацию? т.е. предоставить сценарий, который определит, можно ли найти SDK, и выдаст удобное для пользователя сообщение об ошибке: Установите Windows SDK и / или установочную среду var XXX, чтобы указать правильный путь   -  person David Rodríguez - dribeas    schedule 19.06.2013
comment
@ DavidRodríguez-dribeas: Привет, Дэвид. Спасибо, что нашли время ответить. Да, этот вариант тоже есть.   -  person Pressacco    schedule 19.06.2013


Ответы (1)


Я помню, что, работая в охранной компании, у команды был сценарий, который обычно копирует все зависимости для вас, как только вы нажимаете компиляцию, в определенную папку для вас. его свойства сборки для проекта MFC, однако в то время меня это сбивало с толку.

ссылка казалась очень полезной, спасибо

person aah134    schedule 19.06.2013
comment
Я использовал это в прошлом, и хотя для этого требовалось больше места на жестком диске, иметь возможность просто проверить проект из репозитория, запустить скрипт, который загрузит с сервера все зависимости, построит и упакует за один шаг, было замечательно - person David Rodríguez - dribeas; 19.06.2013
comment
прямо сейчас у нас есть стажеры, которые тратят все свое время на изучение Python и написание сценариев для управления исходным кодом или всего, что необходимо для проекта, например, настройки новых машин. Я никогда не испытывал этого, но Python казался очень мощным инструментом - person aah134; 19.06.2013