gpt4 book ai didi

python - 如何限制 SCons 命令构建器仅在其依赖项发生更改时运行?

转载 作者:太空狗 更新时间:2023-10-30 01:52:35 25 4
gpt4 key购买 nike

我在 scons 中使用命令生成器来指定需要调用特定脚本来生成特定文件。

我只想运行自文件先前生成以来修改过的脚本。命令生成器的默认行为似乎是始终运行脚本。我怎样才能改变这个?

这是我当前的 SConstruct:

speed = Command('speed_analysis.tex','','python code/speed.py')
report = PDF(target = 'report.pdf', source = 'report.tex')
Depends(report, speed)

最佳答案

首先,看起来 code/speed.py 无法控制输出文件名...硬编码输出文件名通常被认为是 scons 中的不良做法(请参阅 yacc 工具)。这样读起来会更好:

speed = Command('speed_analysis.tex', [], 'python code/speed.py -o $TARGET')

现在,PDF 目标从 report.tex 生成一个 report.pdf。我猜测存在从 report.texspeed_analysis.tex 的隐式依赖(通过 Tex include 或类似的东西)。

这个:

Depends(report, speed)

如果缺少依赖关系,则表达该依赖关系是正确的。虽然我很惊讶 PDF 生成器的扫描器没有看到隐式依赖......

您应该使用以下方法验证 dep 树:

scons --tree=all

它应该看起来像这样:

+ report.pdf
+ report.tex
+ speed_analysis.tex
+ code/speed.py
+ /usr/bin/python
+ /usr/bin/pdflatex

现在,回答您关于脚本 (speed.py) 始终运行的问题,那是因为它没有输入。 scons 没有什么可以检查的。如果只有 py 文件本身,该脚本文件必须读取某物 作为输入。您需要告诉 scons 所有直接和隐式依赖关系,以便它短路后续运行:

Command('speed_analysis.tex', 'code/speed.py', 'python $SOURCE -o $TARGET')

关于python - 如何限制 SCons 命令构建器仅在其依赖项发生更改时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com