makefile,多个输入的规则

gcb*_*gcb 2 makefile gnu-make

有一个耗时的步骤来展平一堆文件。

基本上我希望这是有效的语法

%.out: %.input1 %.input2
    merge $<1 $<2 $@

doit: project.out
    # project.out merged
Run Code Online (Sandbox Code Playgroud)

我远非 makefile 专家,但我喜欢使用 .SULFFIXS 来做到这一点,当只有两个文件时,将其适应两个输入或两个输出以备将来使用会很棒......

.SULFFIX: .in.out
.in.out:
    dosomething $< $@
doit: project.out
Run Code Online (Sandbox Code Playgroud)

GNU 制作 3.81

我发现了一些关于如何制定具有多个输出的规则的讨论,但没有一个具有多个输入的讨论。

Max*_*kin 5

%.out: %.input1 %.input2
    merge $<1 $<2 $@
Run Code Online (Sandbox Code Playgroud)

makefile 规则中没有$1$2自动变量,但是,有$^所有先决条件的列表。由于该规则只有两个先决条件,因此它扩展为%.input1 %.input2,或者更准确地说,扩展为$*.input1 $*.input2。因此:

%.out: %.input1 %.input2
    merge $^ $@
Run Code Online (Sandbox Code Playgroud)

应该够了。

.SULFFIXES,IMO,不是很有用,因为它使用了人们无法看到和更改的隐式规则定义。

[更新]

关于doit目标,为了防止它在每次您可能想要将规则命令更改为:

doit: project.out
    # project.out merged
    touch $@
Run Code Online (Sandbox Code Playgroud)