SCons配置文件和默认值

时间:2010-09-16 09:06:51

标签: python configuration scons

我有一个项目,我使用SCons(和MinGW / gcc,取决于平台)构建。此项目依赖于其他几个库(我们称之为libfoolibbar),这些库可以安装在不同用户的不同位置。

目前,我的SConstruct文件会在这些库中嵌入硬编码路径(例如:C:\libfoo)。

现在,我想在我的SConstruct文件中添加一个配置选项,以便在其他位置(例如libfoo)安装C:\custom_path\libfoo的用户可以执行以下操作:< / p>

> scons --configure --libfoo-prefix=C:\custom_path\libfoo

或者:

> scons --configure
scons: Reading SConscript files ...
scons: done reading SConscript files.
### Environment configuration ###
Please enter location of 'libfoo' ("C:\libfoo"): C:\custom_path\libfoo
Please enter location of 'libbar' ("C:\libfoo"): C:\custom_path\libbar
### Configuration over ###

选择后,应将这些配置选项写入某个文件,并在每次scons运行时自动重新读取。

scons是否提供了这样的机制?我该如何实现这种行为?我并不完全掌握Python,所以即使是明显(但完整)的解决方案也是受欢迎的。

感谢。

1 个答案:

答案 0 :(得分:5)

SCons有一个名为“Variables”的功能。您可以对其进行设置,以便它可以非常轻松地从命令行参数变量中读取。因此,在您的情况下,您可以从命令行执行以下操作:

scons LIBFOO=C:\custom_path\libfoo

...并且在运行之间会记住变量。因此,下次您只需运行scons并使用之前的LIBFOO值。

在代码中你可以这样使用它:

# read variables from the cache, a user's custom.py file or command line
# arguments
var = Variables(['variables.cache', 'custom.py'], ARGUMENTS)
# add a path variable
var.AddVariables(PathVariable('LIBFOO',
        'where the foo library is installed',
        r'C:\default\libfoo', PathVariable.PathIsDir))

env = Environment(variables=var)
env.Program('test', 'main.c', LIBPATH='$LIBFOO')

# save variables to a file
var.Save('variables.cache', env)

如果你真的想使用“ - ”样式选项,那么你可以将上面的内容与AddOption函数结合起来,但它更复杂。

This SO question讨论了从Variables对象中获取值而不将它们传递给环境所涉及的问题。