COMSTR基于COM

时间:2018-06-06 18:50:59

标签: scons

如何从COM生成COMSTR以包含正在执行的完整命令。例如:

env = Environment(CPPPATH='/opt/foo:/opt/bar')
print(env['CXXCOM'])
env['CXXCOMSTR'] = 'fizz\n$CXXCOM\nbuzz'
env.Object('a.cpp')

打印

$CXX -o $TARGET -c $CXXFLAGS $CCFLAGS $_CCCOMCOM $SOURCES
fizz
g++ -o a.o -c     $( -I/opt/foo -I/opt/bar $) a.cpp
buzz

第3行预计g++ -o a.o -c -I/opt/foo -I/opt/bar a.cpp时。获得预期输出的最简单方法是什么?

How to augment scons' $*COMSTR有一个接受的答案env['CXXCOMSTR'] = 'fizz\n$CXXCOM\nbuzz'不行,而另一个答案说Scons中没有任何内容。

我在Centos 7上使用Scons 3.0.1和Python 2.7。

1 个答案:

答案 0 :(得分:0)

如果您阅读了联机帮助页,您就会意识到" $("和" $)"插入命令字符串以告知SCons在生成命令签名时不使用它们之间的任何内容。此签名用于确定自上次构建后它是否已更改,如果是,则重建。

因此,通过上面的示例,您必须追踪哪个变量引入了$(' s。可能是它的_CPPINCFLAGS并在没有它的情况下重建CXXCOM。

或者您可以创建一个可调用类并为其设置一个Environment()变量,然后执行以下操作:

env['CXXCOMSTR'] = 'fizz\n${SANITIZE($CXXCOM)}\nbuzz'

搜索"变量替换"在联机帮助页中的示例:https://scons.org/doc/production/HTML/scons-man.html

在你的函数中,你想要调用env.subst(the_argument) 请参阅:https://scons.org/doc/production/HTML/scons-man.html#f-subst