从文件中读取SCons环境设置

时间:2013-10-17 13:15:38

标签: c++ python build scons

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

## 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"])

稍后通过命令行参数选择环境。

这很有效,但它不是很优雅,因为每个开发人员都会使SConstruct文件变得更长。是否可以将环境设置输出到需要根据开发人员修改的设置文件?

1 个答案:

答案 0 :(得分:2)

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

  • 您可以让每个开发人员指定环境变量和那些环境变量 可以使用pythons os.environ方法
  • 通过SConscript准备好
  • 你可以使用scons Variables
  • 您可以创建一个由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时,添加构建变量

scons GTEST_PATH=/Users/cls/workspace/gtest VARIANT=release

如果您不想在每次运行时键入该值,可以指定环境变量GTEST_PATH,也可以指定SCONSFLAGS环境变量。

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

如果您希望自己可以创建一个可以读入的配置文件。我会查看这篇文章:

Scons (Build System) Variables : load config file with custom/unknown values