Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost-将其放在源代码管理中,还是让任何开发人员自己安装?_C++_Svn_Version Control_Boost - Fatal编程技术网

C++ 使用boost-将其放在源代码管理中,还是让任何开发人员自己安装?

C++ 使用boost-将其放在源代码管理中,还是让任何开发人员自己安装?,c++,svn,version-control,boost,C++,Svn,Version Control,Boost,目前,我们在第三方目录下的SVN中使用Boost。 问题是更新整个树需要花费很多时间,我把责任归咎于Boost的大量文件(以及其他罪魁祸首) 或者,我可以让任何开发人员自己安装它,但是我必须强迫他们安装到相同的位置(这很难看…) 什么是首选?如何处理安装位置问题? 还有其他选择吗 我在Windows下使用的是VS2008(很快就是VS2010)(而不是在…:)下使用的VS2008) 编辑: 我们已经迁移到VS2010,正在使用属性表。请参见下面我的答案。 Ralf提供了一个非常详细的使用批处理文

目前,我们在第三方目录下的SVN中使用Boost。 问题是更新整个树需要花费很多时间,我把责任归咎于Boost的大量文件(以及其他罪魁祸首)

或者,我可以让任何开发人员自己安装它,但是我必须强迫他们安装到相同的位置(这很难看…)

什么是首选?如何处理安装位置问题?
还有其他选择吗

我在Windows下使用的是VS2008(很快就是VS2010)(而不是在…:)下使用的VS2008)

编辑: 我们已经迁移到VS2010,正在使用属性表。请参见下面我的答案。
Ralf提供了一个非常详细的使用批处理文件的方法。

其他方法仍受欢迎……:)

由于您的应用程序依赖于boost,我认为有一个专门用于存储它的内部SVN项目是值得的。这保证了每个人都将使用相同版本的库,并防止发生意外


如果使用用于在系统上构建和安装boost的命令将安装文件/脚本添加到项目中,您将解决这个问题,其他开发人员也会很高兴,他们只需运行一个脚本就可以将所有内容正确安装到他们的系统上。

我们启动Visual Studio时,可以选择使用声明环境变量的批处理文件,例如

@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%
当然,lib路径等也有类似的情况。这些批处理文件被签入SVN,一旦开发人员签出源代码,他/她必须第一次更新路径以反映特定机器上的环境,然后一切都设置为正常

这适用于VS2003300082010。在批处理文件中,我们还声明了各种路径,如VS头路径、lib路径、SDK路径,一旦VS启动,环境就全部设置好了

在VS2010中,您可以使用属性表机制来定义自定义环境变量,如果所有开发人员都在使用VS2010,这会使我们的方法变得过于简单,但在不同VS IDE版本以及不同机器之间切换时,它非常方便,特别是在像您这样的场景中,不同的boost版本在不同的机器上使用,或者boost安装在不同的目录中,等等

编辑: 我更喜欢批处理文件方法,因为正如您所说,它适用于所有版本的VS。我每个解决方案都有一个批处理文件,它调用两个其他批处理文件,一个包含特定于用户的信息,如VS版本、SDK、boost目录等,另一个包含常见路径,如VS目录和我们的特定于软件的路径。正如您所说,VS2010解决了这个“基本”问题,但不适用于以前的版本。对于我们来说,现在只需编辑批处理文件,就可以非常轻松地在不同的机器上工作,而不必考虑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需要通过批处理文件启动。

我接受了Ralf的提议,使用属性表,以下是完整的解决方案。 请注意,这仅是VS2010

  • vsprops文件位于我的源代码管理的第三方文件夹\boost中。
    在属性页中,定义了两个宏-
    boost\u include\u path
    boost\u lib\u path

    这些宏中的每一个都使用
    $(MSBuildThisFileDirectory)
    引用它驻留在本地计算机上的路径,并假定
    boost\u 1\u 46
    boost\u 1\u 46\stage\lib
    位于该(第三方\u文件夹\boos)目录下。最后,
    附加Include目录
    附加库目录
    分别使用这些宏
  • boost位于组织内部的一个网络共享中,在第三方文件夹\boost中有一个简单的xcopy批处理文件,它将boost复制到那里(以获取本地副本)
  • 我已经将属性表应用于每个需要boost的项目。请注意,如果在
    Microsoft.Cpp.Win32.user
    属性页之前对其进行计算(您可以在其他属性页之间上下移动),则每个用户都可以在本地重写值
优点:

  • 所有需要提升的项目的单点定义。下次升级boost会更快。此外,添加boost范围的定义也很容易(例如,
    boost\u FILESYSTEM\u VERSION=2
    使我免于在所有项目中手动定义)
  • 每个用户都可以通过在Microsoft.Cpp.Win32.user上重新定义
    boost\u include\u path
    boost\u lib\u path
    本地覆盖boost位置,甚至可以明确定义boost
  • boost不在源代码管理中。这大大提高了我的SVN性能
缺点:

  • 仍然需要在每台新机器上运行第一次安装程序(只是在源代码管理上增加功能并不需要)。另一方面,这是一次获得提振

干杯

您正在使用某种构建工具系统吗?您可能可以配置增压位置。将boost放在VCS中没有意义。当然有:这就是我目前使用相对路径对项目引用boost的方式,保存任何环境变量定义。您可以强制开发人员将目录符号链接到他们的boost安装。@gww遗憾的是,它的windows。对不起,没有提及。修订版的.NTFS具有连接点,而不是文件夹的符号链接。这可能会有帮助