scons - 在 SCons Builder 的操作中调用函数
问题描述
我正在尝试在 SCons 中编写一个 Builder 来调用命令行可执行文件,其中包含一些由(一系列)python 函数生成的参数。
cmdVars = Variables(None, ARGUMENTS)
cmdVars.AddVariables(
EnumVariable('DEBUG', 'help for debug', 'a', allowed_values=('a','b','c')),
PathVariable('CLI', 'path to cli exe', 'C:\...\blah.exe', PathVariable.PathIsFile)
)
env = Environment(variables = cmdVars)
def generateSomeExtraBitsDependingOnFlag(debug):
if (debug == 'a'):
return "-DDEBUG -DBlah myTextHere"
return ''
myBuilder = Builder(
action = '"$CLI" generateSomeExtraBitsDependingOnFlag("$DEBUG")'
)
<extra stuff to add myBuilder to env and call env.myBuilder>
“$CLI”输入被正确地替换为输出(当调用 scons 时),C:\Program Files\...\blah.exe
但无论设置如何,函数的输出都不会出现DEBUG
。
在解析SConstruct文件时print(debug)
在函数内部打印$DEBUG
(因此它与 if 条件不匹配也就不足为奇了)。
我是否只需要使用生成器或按照第 18.4 章(执行 Python 函数的构建器)中的说明来完成这项工作?编写执行外部命令的构建器部分不是我想要的吗?
我怀疑鉴于理解,用户指南很清楚,但在不知道答案的情况下,该指南对我来说有点不透明。
解决方案
尝试这个:
cmdVars = Variables(None, ARGUMENTS)
cmdVars.AddVariables(
EnumVariable('DEBUG', 'help for debug', 'a', allowed_values=('a','b','c')),
PathVariable('CLI', 'path to cli exe', 'C:\...\blah.exe', PathVariable.PathIsFile)
)
env = Environment(variables = cmdVars)
def generateSomeExtraBitsDependingOnFlag(source, target, env, for_signature):
if (env['DEBUG'] == 'a'):
return "-DDEBUG -DBlah myTextHere"
return ''
env['generateSomeExtraBitsDependingOnFlag'] =generateSomeExtraBitsDependingOnFlag
myBuilder = env.Builder(
action = '"$CLI" ${generateSomeExtraBitsDependingOnFlag}'
)
env.Append(BUILDERS = {'myBuilder' : myBuilder})
env.myBuilder('dummy','input')
推荐阅读
- javascript - 尝试从对象中解构值会返回错误
- python-3.x - 缩放 tkinter 画布中的每个对象
- gitlab - 如何从我的 IBM Cloud Git Repos and Issue Tracking 存储库下载原始文件?
- syntax - Rust 声明性宏中的 @ 符号是什么意思?
- python - 如何将文本添加到列表中的每个项目
- c# - IServerSideEvents 的 IOC 注入
- typescript - 无法访问我的 component.html 中的 null/undefined 属性
- javascript - 无法使用快速验证器在视图中显示错误消息
- c# - c#在系统控制中启用音频设置“听这个设备”
- sql-server - 如何将文件内容作为数据导入表列