Мы запускаем 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 должен быть запущен через командный файл.