Makefiles中的%是如何工作的?

Makefiles中的%是如何工作的?,makefile,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 $< %.out:%.inp 猫$< 但它不起作用。有谁能向我解释一下在你的第一个makefile中使用%?: 1.out

我试图理解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 $<
%.out:%.inp
猫$<

但它不起作用。有谁能向我解释一下在你的第一个makefile中使用
%

1.out: 1.inp
    cat 1.inp
%.out: %.inp
    cat $<
1.out
是具有先决条件
1.inp
和命令
cat 1.inp
的目标。这就构成了一条规则 生成
1.out
,如果运行makefile,指定没有明确的目标或目标
1.out
,则 规则将被执行

在第二个makefile中:

1.out: 1.inp
    cat 1.inp
%.out: %.inp
    cat $<
在这种情况下,当
1时,
1.inp
将被
cat
-ed。inp
1.out

或者,您可以在生成文件中指定一个虚假目标,例如
all
,该目标的先决条件为
1.out
2.out
3.out
,如下所示:

%.out: %.inp
    cat $<

1.out:
.PHONY: all

%.out: %.inp
    cat $<

all: 1.out 2.out 3.out
。假冒:全部
%.out:%.inp
猫$<
全部:1.出局2.出局3.出局
在这种情况下,
1.inp
2.inp
3.inp
中的每一个都将在其比相应的
.out
文件更新时被
cat
-ed


每当make发现它必须将表单something.out作为目标时,它将识别模式规则是适用的,并将执行模式规则的匹配实例。

在第一个make文件中:

1.out: 1.inp
    cat 1.inp
%.out: %.inp
    cat $<
1.out
是具有先决条件
1.inp
和命令
cat 1.inp
的目标。这就构成了一条规则 生成
1.out
,如果运行makefile,指定没有明确的目标或目标
1.out
,则 规则将被执行

在第二个makefile中:

1.out: 1.inp
    cat 1.inp
%.out: %.inp
    cat $<
在这种情况下,当
1时,
1.inp
将被
cat
-ed。inp
1.out

或者,您可以在生成文件中指定一个虚假目标,例如
all
,该目标的先决条件为
1.out
2.out
3.out
,如下所示:

%.out: %.inp
    cat $<

1.out:
.PHONY: all

%.out: %.inp
    cat $<

all: 1.out 2.out 3.out
。假冒:全部
%.out:%.inp
猫$<
全部:1.出局2.出局3.出局
在这种情况下,
1.inp
2.inp
3.inp
中的每一个都将在其比相应的
.out
文件更新时被
cat
-ed


每当make发现它必须将表单something.out作为目标时,它将识别模式规则是适用的,并将执行模式规则的匹配实例。

您想了解
%
,或者是否要打印新的
inp
文件的内容?是否要理解
%
,或者是否要打印新的
inp
文件的内容?您还可以直接在命令行上指定感兴趣的目标:
make 1.out 2.out 3.out
将生成所需的输出,而无需在
Makefile
中添加任何内容。您还可以直接在命令行上指定感兴趣的目标:
make 1.out 2.out 3.out
将生成所需的输出,而无需在
make文件中添加任何内容