我有一个项目,我使用SCons(和MinGW / gcc,取决于平台)构建。此项目依赖于其他几个库(我们称之为libfoo
和libbar
),这些库可以安装在不同用户的不同位置。
目前,我的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,所以即使是明显(但完整)的解决方案也是受欢迎的。
感谢。
答案 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对象中获取值而不将它们传递给环境所涉及的问题。