基于 COM 的 COMSTR
COMSTR based on COM
如何从 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
时。获得预期输出的最简单方法是什么?
有一个接受的答案,类似于 env['CXXCOMSTR'] = 'fizz\n$CXXCOM\nbuzz'
行不通,另一个答案说 Scons 没有内置任何东西。
我在 Centos 7 上使用带有 Python 2.7 的 Scons 3.0.1。
如果您阅读联机帮助页,您会发现“$(”和“$)”被插入到命令字符串中,以告诉 SCons 在生成命令签名时不要使用它们之间的任何内容。此签名用于确定自上次构建以来它是否已更改,如果已更改则重新构建。
因此,对于上面的示例,您必须追踪哪个变量引入了 $(。可能是它的 _CPPINCFLAGS 并在没有它的情况下重建 CXXCOM。
或者您可以创建一个可调用的 class 并为其设置一个 Environment() 变量,然后执行如下操作:
env['CXXCOMSTR'] = 'fizz\n${SANITIZE($CXXCOM)}\nbuzz'
在联机帮助页中搜索 "Variable Substitution" 以获取示例:https://scons.org/doc/production/HTML/scons-man.html
在您的函数中,您需要调用 env.subst(the_argument)
参见:https://scons.org/doc/production/HTML/scons-man.html#f-subst
如何从 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
时。获得预期输出的最简单方法是什么?
env['CXXCOMSTR'] = 'fizz\n$CXXCOM\nbuzz'
行不通,另一个答案说 Scons 没有内置任何东西。
我在 Centos 7 上使用带有 Python 2.7 的 Scons 3.0.1。
如果您阅读联机帮助页,您会发现“$(”和“$)”被插入到命令字符串中,以告诉 SCons 在生成命令签名时不要使用它们之间的任何内容。此签名用于确定自上次构建以来它是否已更改,如果已更改则重新构建。
因此,对于上面的示例,您必须追踪哪个变量引入了 $(。可能是它的 _CPPINCFLAGS 并在没有它的情况下重建 CXXCOM。
或者您可以创建一个可调用的 class 并为其设置一个 Environment() 变量,然后执行如下操作:
env['CXXCOMSTR'] = 'fizz\n${SANITIZE($CXXCOM)}\nbuzz'
在联机帮助页中搜索 "Variable Substitution" 以获取示例:https://scons.org/doc/production/HTML/scons-man.html
在您的函数中,您需要调用 env.subst(the_argument) 参见:https://scons.org/doc/production/HTML/scons-man.html#f-subst