首先,它似乎code/speed.py
无法控制输出文件名......硬编码的输出文件名通常被认为是 scons 中的不良做法(请参阅 yacc 工具)。像这样读起来会更好:
speed = Command('speed_analysis.tex', [], 'python code/speed.py -o $TARGET')
现在,PDF 目标生成一个report.pdf
from report.tex
。我猜从report.tex
to有一个隐含的依赖关系speed_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')