在SConscript中将var回显到文件

时间:2014-05-29 16:56:45

标签: scons

在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文件,从而编译版本。

2 个答案:

答案 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中。