如何处理在Makefile中输出多个文件的脚本?

时间:2014-04-30 03:45:20

标签: makefile

所以我有一个脚本myscript.py,它会生成一些输出文件,out/a.pickleout/b.pickleout/c.pickle

我有一个包含规则的Makefile:

out/a.pickle: data/data.csv
    myscript.py

现在,如果我更新脚本,首先,make out/a.pickle说这里没有什么可做的,即使脚本已被修改。是不是应该检查是否已经更新了然后运行它们?我是否需要将myscript.py作为依赖项添加到out/a.pickle或其他内容?

其次,有没有办法处理脚本有多个输出文件的事实?我是否需要为每个创建规则?

1 个答案:

答案 0 :(得分:1)

Make不会检查可执行文件的时间戳。否则,如果gccecho或shell升级,则必须重新编译Universe,无论如何它都是滑坡;如果库或内核也以需要重新编译的方式改变了怎么办?无论如何,你需要人工干预。因此make的设计者只是简单地依赖于显式依赖。

(GNU Make有很多其他内置的隐式依赖项,这很方便。我依旧认为原来的make根本就没有任何内置依赖项。任何人都可以确认吗?)

您可以在一个规则中声明所有输出:

out/a.pickle out/b.pickle out/c.pickle: myscript.py data/data.csv
        ./$^

(注意脚本现在如何包含在依赖项中。您可能希望在脚本被认为稳定后更改它。然后您还需要更改操作。)