Makefile中的%如何工作?

时间:2014-04-03 09:57:46

标签: makefile

我试图了解makefile的工作原理。如果我尝试以下

1.out : 1.inp
    cat 1.inp

它,按预期工作(如果1.inp更新为1.out或如果1.out不存在,则打印1.inp的内容)。

然后我需要做以下事情:

cat 1.inp
cat 2.inp
cat 3.inp

我认为我可以使用

%.out : %.inp
    cat $<

但它不起作用。任何人都可以向我解释%的使用吗?

1 个答案:

答案 0 :(得分:4)

在你的第一个makefile中:

1.out: 1.inp
    cat 1.inp

1.out目标,其中包含先决条件 1.inp命令 cat 1.inp。这构成了规则 制作1.out并且如果你运行makefile,指定没有明确的目标或目标1.out,那么 规则将被执行。

在你的第二个makefile中:

%.out: %.inp
    cat $<

您只是表达了一个模式规则,用于从某种 .inp形式的先决条件中创建某种 .out形式的目标您尚未指定makefile可以生成的任何实际目标

您可以将1.out指定为具有以下makefile的目标:

%.out: %.inp
    cat $<

1.out:

在这种情况下,1.inpcat - 1.inp更新1.out

或者您可以指定假冒目标,例如all,在这样的makefile中具有先决条件目标1.out2.out3.out

.PHONY: all

%.out: %.inp
    cat $<

all: 1.out 2.out 3.out

在这种情况下,1.inp2.inp3.inp中的每一个都会cat - 当它比相应的.out文件更新时。{/ p>

每当make发现它必须制作某种 .out形式的目标时,它会认识到模式规则是适用的,并将执行匹配的实例模式规则。