如何编写输出不同于目标的(GNU)makefile?

时间:2014-02-27 15:48:34

标签: makefile gnu-make

我有一个脚本,它接收一个文件名并生成多个具有相同名称但扩展名不同的文件。我想编写一个makefile,它取决于使用不同扩展名生成的文件,但只指定文件名。我有一个虚拟的例子来解释它。

test_output:test_input
    genereate.py -i $^ -o $@

上述makefile依赖项会生成多个文件,但文件名相同但扩展名不同,但不会生成实际目标。例如,它生成

test_output.a test_output.b test_output.c

上面写的方式不是没有实际目标的有效方式,所以即使输出已经存在,它也会运行。

我如何指定makefile以便它读入targettest_output),但实际上取决于它生成的输出文件,如test_output.a或任何其他文件。

1 个答案:

答案 0 :(得分:2)

如果您使用GNU make(您没有说),您可以使用模式规则来说明基于单个词干生成多个输出的规则。例如,你可以写:

%.a %.b %.c : test_input
        genereate.py -i $^ -o $*

(如果输入文件名与具有相同词干的输出文件名相关,它会工作得更好,但上述操作虽然你必须为每个输入文件写一个不同的文件名。)

通常这就是你想要的,所以需要这些输出的其他目标可以依赖它们。

如果你真的想拥有一个没有任何扩展名的目标,只需创建它:

test_output : test_output.a test_output.b test_output.c

%.a %.b %.c : test_input
        genereate.py -i $^ -o $*