在SConscript文件中,我有一个env变量BUILDID_STR
包含我希望输出到文件的C字符串。
bstr = env['BUILDID_STR']
print(bstr)
在打印时,print(bstr)
会正确显示:
//this file is automatically generated
static char* build_str="0|0.1.0|2014-05-29_16:16:51";
但是,我无法正确扩展/导出var,只输出文字字符串而不是上面的文字:
cat src/log/src/version.c
env[BUILDID_STR]
这是我的SConscript文件的相关部分
env.Command(target='#/src/log/src/version.c',
source=libSrcfiles,
action="echo env['BUILDID_STR'] > $TARGET")
env.SharedLibrary('log', [libSrcfiles, '#/src/log/src/version.c'])
我还尝试了函数中的代码并传递给shell脚本,所有这些都具有相同的结果。
我在SharedLibrary中拥有... / version.c的原因是我的目标是仅在构建libSrcfiles
时生成.c文件,从而编译版本。
答案 0 :(得分:2)
“textfile
”工具为此类案例提供了两个构建器Textfile()
和Substfile()
。你可能想要使用第一个:
env = Environment(tools=['textfile'])
env['BUILDID_STR'] = 'A test'
env.Textfile('test.txt', ['$BUILDID_STR'])
答案 1 :(得分:0)
如您所见,该操作不会扩展env变量。在操作中,您可以使用$VAR
语法引用env变量(就像引用SCons提供的$SOURCE
和$TARGET
变量一样):
env.Command(target='#/src/log/src/version.c',
source=libSrcfiles,
action="echo $BUILDID_STR > $TARGET")
此解决方案可能无法处理包含多行的BUILDID_STR
。
您可能想要研究从模板构建源文件的系统(而不是完全在字符串中构建文件内容)。 Substfile Builder中引用的this previous question可能是一个很好的起点 - 您可以提供要在输入文件中替换的(键,值)对的列表。 Substfile Builder内置于最新版本的SCons中。