我想在external.py文件中定义scons构建变量,如
mode=debug
toolchain=x86
我想在SConstruct文件中回读这些变量,该文件位于同一目录中。根据变量值,我想做一些操作!
vars = Variables('external.py')
vars.Add('mode', 'Set the mode for debug or release', 'debug')
if ${RELEASE}=="debug"
#Do these!
elif ${RELEASE}=="release"
#Do that!
答案 0 :(得分:1)
如果external.py
包含有效的Python代码,则只需使用import
关键字将其导入即可。然后,您可以使用dir
函数迭代external
模块中定义的名称,并将它们添加到SCons变量中。您可能还想查看getattr
函数。
答案 1 :(得分:1)
你缺少的是Scons Environment和你的变量。
vars = Variables('external.py')
vars.Add('mode', 'Set the mode for debug or release', 'debug')
env = Environment(variables = vars)
if env['mode'] == 'debug':
# do action1
elif env['mode'] == 'release':
# do action2
else:
# do action3
的更多信息
答案 2 :(得分:1)
Soumyajit答案很棒,但我想补充一点,如果您希望能够使用命令行覆盖文件中的值并限制变量的允许值,您可以按照以下步骤操作:
# Build variables are loaded in this order:
# Command Line (ARGUMENTS) >> Config File (external.py) >> Default Value
vars = Variables(files='external.py', args=ARGUMENTS)
vars.Add(EnumVariable('mode', 'Build mode.', 'debug', allowed_values=('debug', 'release')))
env = Environment(variables = vars)
if env['mode'] == 'debug':
env.Append(CCFLAGS = [ '-g' ])
# whatever...
else:
env.Append(CCFLAGS = '-O2')
# whatever...
您可以调用此scons
之类的构建脚本,但也可以通过执行scons mode=release
如果您为变量指定了错误值,则会收到来自Scons的错误,如:
$> scons mode=foo
scons: Reading SConscript files ...
scons: *** Invalid value for option mode: foo. Valid values are: ('debug', 'release')