目前,我们在第三方目录下的SVN中使用Boost。问题是更新整棵树需要花费很多时间,我把Boost的海量文件(以及其他罪魁祸首之一)归咎于此。
或者,我可以让任何开发人员自己安装它,但是我必须强迫它们安装到相同的位置(这很难看.)。
什么是首选?如何处理安装位置问题?
还有其他选择吗?
我在Windows下使用VS2008 (很快的VS2010) (而不是VS2008在.))。
编辑:我们迁移到VS2010并使用属性表。见下面的答案。
罗尔夫有一个伟大和非常详细的方法来使用批处理文件。
其他方法仍然受到欢迎..。:)
发布于 2011-04-25 23:02:18
我接受了拉尔夫的提议使用财产表以下是完整的解决方案。请注意,这是VS2010 only。
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分别使用这些宏。Microsoft.Cpp.Win32.user属性表之前对其进行评估(可以在其他属性表之间向上或向下移动),则每个用户都可以在本地覆盖值。优势:
BOOST_FILESYSTEM_VERSION=2使我免于在所有项目中手动定义)。boost_include_path和boost_lib_path上重新定义Microsoft.Cpp.Win32.user,甚至通过显式定义boost来在本地覆盖boost位置。缺点:
干杯
发布于 2011-03-27 18:48:37
由于您的应用程序依赖于boost,所以我认为有一个专门用于存储它的内部SVN项目是值得的。这保证了每个人都会使用相同版本的库,并防止事故发生。
如果您在项目中添加一个安装文件/脚本,并在系统上添加用于构建和安装boost的命令,您将解决这个问题,其他开发人员会很高兴,因为他们只需要运行一个脚本就可以在他们的系统上正确安装所有东西。
发布于 2011-03-27 19:47:44
我们使用声明环境变量的批处理文件使用/UseEnv选项启动Visual。
@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,一旦开发人员签出源,他/她必须在第一次更新路径以反映特定机器上的环境,然后一切都设置好了。
这适用于VS2003,3005,2008,2010。在我们的批处理文件中,我们还声明了各种路径,如VS头路径、lib路径、SDK路径,并且一旦VS启动,环境将全部设置。
在VS2010中,您可以使用属性表机制来定义自定义环境变量,如果所有开发人员都在使用VS2010,这会使我们的方法过度使用,但是在切换不同的IDE版本和不同的机器时非常方便,特别是在您这样的场景中,在不同的机器上使用不同的boost版本,或者boost安装在不同的目录中等等。
编辑:,我更喜欢批处理文件方法,因为就像您说的那样,它适用于VS的所有版本。我每个解决方案都有一个批处理文件,它调用两个其他批处理文件,一个包含特定于用户的信息,如VS版本、SDK、boost dirs等,另一个包含常见路径,如VS目录和我们的软件特定路径。就像你说的,VS 2010解决了这个“基本”问题,而不是以前的版本。对于我们来说,现在很容易在不同的机器上工作,而不考虑boost、VS或MS版本,只需编辑批处理文件。
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需要通过批处理文件启动。
https://stackoverflow.com/questions/5451413
复制相似问题