首页 文章

Makefile中的通配符执行某些目标但不执行其他目标

提问于
浏览
1

从我能够找到的,Makefile目标中的通配符:先决条件行是一个模式规则,指出“对于每个目标X.o,如果存在名为X.c的文件(例如),请执行以下命令”

我似乎无法弄清楚为什么,在下面的Makefile中只执行了一个通配符参数 .

all : foo.o

%.o : %.c
    echo first %.o : %.c

%.o : %.c
    echo second %.o : %.c

foo.o: foo.c foo.h bar.h baz.h

当我全部运行时,我得到这个输出:

echo second %.o : %.c
second %.o : %.c

据我所知,两个通配符都应该显示,因为它们都匹配模式 . 谁能解释为什么他们不是?

1 回答

  • 1

    第二个 %.o: %.c 规则 overrides 第一个 . 这就是为什么不输出第一个规则的输出 .

    来自gnu-make manual

    您可以通过定义具有相同目标和先决条件但具有不同配方的新模式规则来覆盖内置隐式规则(或您自己定义的规则) .

相关问题