如何让Variables.save
保存所有变量,而不仅仅是用户指定的变量。我想确保未来的scons运行使用完全相同的设置。
答案 0 :(得分:0)
遗憾的是,使用核心SCons功能无法做到这一点。是否保存变量值的决定is hard-wired into Save,只能保存不是默认值的值。
但是,您可以通过滥用未记录的“转换器”功能来保存所有变量。它并不漂亮,但能完成这项工作。
当你调用Variables.Save()
时,它调用每个变量的转换器函数并检查结果以查看它是否与默认(输入)值相同。如果从Save
调用时返回的值不是输入值,则所有值都存储在缓存文件中。在其他地方,您需要转换器按原样返回输入值,否则它将使用不正确的变量值。
def save_all(value, env=None):
import traceback
# if called in Save method, return non-default
for line in traceback.format_stack():
lines = line.splitlines()
if lines[0].endswith('Save'):
return value + 'save'
# return correct value otherwise
return value
import SCons
var = Variables("config.py", ARGUMENTS)
# AddVariables accepts tuples of:
# Variable key, description, default-value, validator, converter
var.AddVariables(
('CC', 'The C Compiler', 'cc', None, save_all),
('CFLAGS', 'Flags to pass to compiler', '-Wall', None, save_all))
env = Environment(tools=[], variables=var)
var.Save('config.py', env)
print 'CC', env['CC']
print 'CFLAGS', env['CFLAGS']
这里函数save_all
是黑客。它使用堆栈跟踪来检查是否从Save中调用它。如果是,则返回篡改值,否则返回输入值不变。您可以在缓存文件“config.py”中检查此示例的结果。