Gnu make makefile隐式和显式规则

Gnu make makefile隐式和显式规则,gnu-make,Gnu Make,我有个规矩 *.o: *.c gcc <certain compiler switches> *.o:.c 海湾合作委员会 我想用不同于标准规则的编译器开关构建一些*.c文件 我相信我只是在第一条规则之前加上 foo.o : foo.c foobar.o : foobar.c gcc <other compiler switches> foo.o:foo.c foobar.o:foobar.c 海湾合作委员会 foo和foobar的显式规则是否覆盖

我有个规矩

*.o: *.c
    gcc <certain compiler switches>
*.o:.c
海湾合作委员会
我想用不同于标准规则的编译器开关构建一些*.c文件

我相信我只是在第一条规则之前加上

foo.o : foo.c
foobar.o : foobar.c
    gcc <other compiler switches>
foo.o:foo.c
foobar.o:foobar.c
海湾合作委员会

foo和foobar的显式规则是否覆盖了*.o:*.c规则?

您的makefile有很多问题
*.o:*.c
使用shell通配符,这几乎肯定不是您想要的。您可能希望使用make通配符-
%.o:%.c
编写模式规则。我不太喜欢这些(就是模式规则)。我总是喜欢在我的makefile中非常明确。比如:

SRCS := foo.c foobar.c
OBJS := ${SRCS:%.c=%.o}

${OBJS}: %.o: %.c
    gcc ${OPTS-${@D}} $< -o $@
SRCS:=foo.cfoobar.c
OBJS:=${SRCS:%.c=%.o}
${OBJS}:%.o:%.c
gcc${OPTS-${@D}}$<-o$@

现在,您可以根据需要定义
OPTS foo
OPTS foobar

您尝试过吗?问:
是否应该应用于
foo.o
以及
foobar.o
?是的,foo.o和foobar.o具有相同的编译器开关,但不同于*.o:.c。