Во-первых, похоже, что code/speed.py
не управляет выходным именем файла ... Закодированные выходные имена файлов обычно считаются плохой практикой в scons (см. Инструмент yacc). Было бы лучше читать так:
speed = Command('speed_analysis.tex', [], 'python code/speed.py -o $TARGET')
Теперь цель PDF выдает report.pdf
из report.tex
. Я предполагаю, что существует неявная зависимость от report.tex
до speed_analysis.tex
(через Tex include или что-то в этом роде).
Это:
Depends(report, speed)
Правильно ли выражать эту зависимость, если она отсутствует. Хотя я удивлен, что сканер для PDF Builder не увидел эту неявную зависимость ...
Вы должны проверить дерево депов, используя:
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')