C++ 从文件读取SCons环境设置

C++ 从文件读取SCons环境设置,c++,python,build,scons,C++,Python,Build,Scons,多个开发人员在一个项目上工作,每个开发人员都有不同的依赖项、编译器等路径。目前,所有开发人员共享一个SConstruct文件。当新开发人员加入时,需要创建新的环境,例如: ## environment: macbook macbook = Environment() ### include macbook.Append(CPPPATH = ["/usr/local/Cellar/gcc48/4.8.1/gcc/include/c++/4.8.", \

多个开发人员在一个项目上工作,每个开发人员都有不同的依赖项、编译器等路径。目前,所有开发人员共享一个
SConstruct
文件。当新开发人员加入时,需要创建新的
环境
,例如:

## environment: macbook
macbook = Environment()
### include
macbook.Append(CPPPATH = ["/usr/local/Cellar/gcc48/4.8.1/gcc/include/c++/4.8.", \
                          "/Users/cls/workspace/gtest/include", \
                          "/usr/local/Cellar/log4cxx/0.10.0/include"])
稍后将通过命令行参数选择环境


这是可行的,但不是很优雅,因为随着每个开发人员的增加,sconstuct文件变得越来越长。是否可以将环境设置源文件导出到每个开发人员都需要修改的设置文件中?

有几种方法可以解决此问题:

  • 您可以让每个开发人员指定环境变量和那些环境变量 可以使用pythons os.environ方法通过您的SConscript准备就绪
  • 您可以使用scons变量
  • 您可以创建由scons脚本读入的配置文件
例如,因为我看到您正在使用gtest。如果要指定gtest的路径,可以编写类似的脚本

# build variables
vars = Variables()

vars.Add(EnumVariable('VARIANT', 'Build variant', 'debug', allowed_values('debug', 'release'))
vars.Add(PathVariable('GTEST_DIR', 'path to gtest', os.environ.get('GTEST_PATH'), PathVariable.PathIsDir))

## environment: macbook
macbook = Environment(variables = vars)

Help(vars.GenerateHelpText(macbook))

### include
macbook.Append(CPPPATH = ["/usr/local/Cellar/gcc48/4.8.1/gcc/include/c++/4.8.", \
                      "$GTEST_PATH/include", \
                      "/usr/local/Cellar/log4cxx/0.10.0/include"])
现在,当您运行SCons时,您添加了build变量

scons GTEST_PATH=/Users/cls/workspace/gtest VARIANT=release
如果不想在每次运行时都键入该值,可以指定环境变量
GTEST_PATH
,也可以指定
SCONSFLAGS
环境变量

使用scons变量很有帮助,因为当您键入
scons-h
时,您将获得变量当前值和帮助文本的列表

如果您愿意,可以创建一个可读入的配置文件。我将签出此帖子:


我决定编写一个配置文件,并使用
ConfigParser
模块对其进行解析。切换到这个解决方案很容易。