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。