Использование boost - поставить его в систему контроля версий или позволить любому разработчику установить его самостоятельно? - PullRequest
14 голосов
/ 27 марта 2011

В настоящее время мы используем Boost в нашем SVN в каталоге стороннего производителя. Проблема в том, что обновление всего дерева занимает довольно много времени, и я виню в этом газлионы Boost (среди прочих преступников).

В качестве альтернативы, я могу позволить любому разработчику установить его самостоятельно, но затем я должен заставить их установить в то же место (что довольно уродливо ...).

Что предпочтительнее? Как можно решить проблему с местом установки?
Есть ли другие альтернативы?

Я использую VS2008 (скоро VS2010) под Windows (в отличие от VS2008 под ... :)).

EDIT : Мы перешли на VS2010 и используем списки свойств. Смотрите мой ответ ниже.
У Ральфа есть отличное и очень подробное руководство по использованию командных файлов.
Другие подходы все еще приветствуются ...:)

Ответы [ 3 ]

8 голосов
/ 27 марта 2011

Поскольку ваше приложение зависит от наддува, я считаю, что стоит иметь внутренний проект SVN, предназначенный только для его хранения.Это гарантирует, что все будут использовать одну и ту же версию библиотеки и предотвратит несчастные случаи .

Если вы добавите файл / скрипт INSTALL в проект с командой для сборки и установки boost в системе, вы решите проблему, а другие разработчики будут рады, что онинеобходимо запустить скрипт, чтобы все правильно установлено в их системах.

4 голосов
/ 27 марта 2011

Мы запускаем Visual Studio с параметром / UseEnv , используя пакетные файлы, которые объявляют переменные среды, например,

@set BOOST_BIN=C:\Boost\lib
@echo -- BOOST_BIN set to %BOOST_BIN%
@set BOOST_INCLUDE=C:\Boost\include\boost-1_44
@echo -- BOOST_INCLUDE set to %BOOST_INCLUDE%

, а затем что-то вроде

@set INCLUDE=%DSHOWBASECLASSES%;%INCLUDE%
@set INCLUDE=%XERCESROOT%\src;%INCLUDE%
@set INCLUDE=%XALANROOT%\src;%INCLUDE%
@set INCLUDE=%BOOST_INCLUDE%;%INCLUDE%

Иконечно, аналогичные вещи для путей к библиотекам и т. д. Эти командные файлы проверяются в SVN, и как только разработчик проверяет источник, он / она должен просто обновить путь в первый раз, чтобы отразить среду на этой конкретной машине, а затем все установленоto go.

Это работает для VS2003, 3005, 2008, 2010. В наших пакетных файлах мы также объявляем все виды путей, такие как пути заголовков VS, пути lib, пути SDK и, как только VS запускается, средавсе настройки.

В VS2010 вы можете использовать механизм листа свойств для определения пользовательских переменных среды, что делает наш подход излишним, если все разработчики используют VS2010, но это очень удобно, когда переключение между различными версиями VS IDE, кака также на разных машинах, особенно в таких сценариях, как ваш, где разные буст-версиииспользуется на разных машинах, или boost установлен в разных каталогах и т. д.

Edit: Я предпочитаю подход с пакетными файлами, поскольку, как вы сказали, он работает во всех версиях VS.У меня есть один пакетный файл для каждого решения, который вызывает несколько других пакетных файлов, один из которых содержит специфическую для пользователя информацию, такую ​​как версия VS, SDK, расширенные каталоги и т. Д., А другой содержит общие пути, такие как каталоги VS и наше программное обеспечение.пути.Как вы сказали, VS 2010 решает эту «базовую» проблему, но не для предыдущих версий.Для нас теперь чрезвычайно легко работать на разных машинах, независимо от версий boost, VS или MS SDK, просто редактируя пакетные файлы.

VsVersion.bat

REM Set this to VC8 or VC9 depending on which VS version you want to use
@set VS_VERSION=VC10

IF %VS_VERSION% EQU VC7 GOTO SETUP_VC7_ENV
IF %VS_VERSION% EQU VC8 GOTO SETUP_VC8_ENV
IF %VS_VERSION% EQU VC9 GOTO SETUP_VC9_ENV
IF %VS_VERSION% EQU VC10 GOTO SETUP_VC10_ENV

:SETUP_VC7_ENV
@set VisualStudioRoot=C:\Program Files\Microsoft Visual Studio .NET 2003
@set VisualStudio=%VisualStudioRoot%\Common7\IDE\devenv.exe
@set VisualCDir=VC7
@GOTO END

:SETUP_VC8_ENV
@set VisualStudioRoot=C:\Program Files (x86)\Microsoft Visual Studio 8
@set VisualStudio=%VisualStudioRoot%\Common7\IDE\devenv.exe
@set VisualCDir=VC
@GOTO END

:SETUP_VC9_ENV
@set VisualStudioRoot=C:\Program Files (x86)\Microsoft Visual Studio 9.0
@set VisualStudio=%VisualStudioRoot%\Common7\IDE\devenv.exe
@set VisualCDir=VC
@GOTO END

:SETUP_VC10_ENV
@set VisualStudioRoot=C:\Program Files (x86)\Microsoft Visual Studio 10.0
@set VisualStudio=%VisualStudioRoot%\Common7\IDE\devenv.exe
@set VisualCDir=VC
@GOTO END

:END
@echo -- VisualStudioRoot set to %VisualStudioRoot%
@echo -- VisualStudio set to %VisualStudio%
@echo -- VS_SOL_EXT set to %VS_SOL_EXT%

Вторая партияФайлы содержат пользовательские пути, как указано выше.Эти два пакетных файла - это те, которые каждый пользователь будет редактировать в соответствии со своей средой.Третий пакетный файл вызывает их.Этот содержит стандартные пути и, наконец, этот вызывается другим пакетным файлом для каждого решения.

@call master.bat

@set MediaPipeLineDir=%RTVCRootDir%\MediaPipeLine
@echo -- MediaPipeLineDir set to %MediaPipeLineDir%
@set INCLUDE=%MediaPipeLineDir%;%INCLUDE%

@set SolutionFile=%SolutionDir%\MediaPipeLine/Transcoder.sln
@echo -- SolutionFile set to %SolutionFile%

@rem 
@rem Start development tools
@rem Arguments:
@rem %1 = vs (visual studio)
@rem %2 = cmd (commandline)

@echo -- Exec Visual Studio
@call "%VisualStudio%" /UseEnv %SolutionFile%

@echo -- Exec CMD
@call "%SystemRoot%\system32\cmd.exe"

@:END

Несмотря на определенную сложность в настройке, после написания он работает хорошо.Еще одним недостатком является то, что VS должен быть запущен через командный файл.

0 голосов
/ 26 апреля 2011

Я воспользовался предложением Ральфа, чтобы использовать список свойств, следующим является полное решение. Обратите внимание, что это VS2010 только .

  • Файл vsprops находится в 3-й папке моего управления исходным кодом \ boost.
    В листе свойств определены два макроса - boost_include_path и boost_lib_path.
    Каждый из этих макросов использует $(MSBuildThisFileDirectory) для ссылки на путь, который находится на локальном компьютере, и предполагает, что boost_1_46 и boost_1_46\stage\lib находятся в этом каталоге (3rd_party_folder \ boos). Наконец, Additional Include directories и Additional Library directories используют эти макросы соответственно.
  • boost находится в сетевом ресурсе внутри организации, и существует простой пакетный файл xcopy по адресу 3rd_party_folder \ boost, который копирует туда boost (для получения локальной копии).
  • Я применил лист свойств к каждому из проектов, который требует повышения. Обратите внимание, что если он оценивается до Microsoft.Cpp.Win32.user листа свойств (вы можете перемещать его вверх или вниз между другими листами свойств), каждый пользователь может переопределять значения локально.

Преимущества:

  • Единая точка определения для ВСЕХ проектов, которые нуждаются в повышении. Обновление ускорения будет быстрее в следующий раз. Более того, легко добавить определения для всей надстройки (например, BOOST_FILESYSTEM_VERSION=2 избавил меня от определения вручную во всех проектах).
  • Каждый пользователь может переопределить местоположение буста локально, переопределив boost_include_path и boost_lib_path в Microsoft.Cpp.Win32.user или даже определив буст явно.
  • буст отсутствует в управлении источниками. Это значительно улучшило мою производительность SVN.

Недостатки:

  • По-прежнему нужно запускать первоначальную настройку на каждой новой машине (для этого просто не нужно было добавлять контроль над исходным кодом). С другой стороны, это один раз, чтобы получить импульс.

Приветствия

...