我有一个脚本,它接收一个文件名并生成多个具有相同名称但扩展名不同的文件。我想编写一个makefile
,它取决于使用不同扩展名生成的文件,但只指定文件名。我有一个虚拟的例子来解释它。
test_output:test_input
genereate.py -i $^ -o $@
上述makefile
依赖项会生成多个文件,但文件名相同但扩展名不同,但不会生成实际目标。例如,它生成
test_output.a test_output.b test_output.c
上面写的方式不是没有实际目标的有效方式,所以即使输出已经存在,它也会运行。
我如何指定makefile以便它读入target
(test_output
),但实际上取决于它生成的输出文件,如test_output.a
或任何其他文件。
答案 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 $*