16

我正在尝试使用 scons 来构建乳胶文档。特别是,我想让 scons 调用一个 python 程序,该程序生成一个文件,该文件包含一个表,该表是 \input{} 到主文档中。我查看了 scons 文档,但我并不清楚我需要做什么。

我希望实现的基本上是您使用此 makefile 将获得的结果:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

我如何在 scons 中表达这一点?

4

2 回答 2

16

沿着这些思路应该做的事情 -

env.Command ('document.tex', '', 'python table_generator.py')
env.PDF ('document.pdf', 'document.tex')

它声明“document.tex”是通过调用 Python 脚本生成的,并请求从此生成的“document.tex”文件创建 PDF 文档。

请注意,这只是精神上的。它可能需要一些调整。特别是,我不确定生成'document.tex'需要什么样的语义 - 是否应该每次都生成?只有当它不存在时?当其他文件更改时?(在这种情况下,您可能希望将此依赖项添加为 Command() 的第二个参数)。

此外,如果需要,可以将 Command() 的输出用作 PDF() 的输入。为了清楚起见,我没有这样做。

于 2009-04-08T14:33:08.250 回答
3

在这种简单的情况下,最简单的方法是只使用 subprocess 模块

from subprocess import call
call("python table_generator.py")
call("pdflatex document.tex")

无论这些行放在 SConstruct 文件中的什么位置,它们都会发生在 SCons 执行的任何编译和链接之前。

缺点是这些命令将在您每次运行 SCons 时执行,而不是仅在文件更改时执行,这在您的示例 Makefile 中会发生。因此,如果这些命令需要很长时间才能运行,这将不是一个好的解决方案。

如果您真的只需要在文件更改时运行这些命令,请查看 SCons 手册部分编写您自己的构建器。

于 2009-04-08T13:14:31.420 回答