Makefile中相应的依赖项和目标列表

Makefile中相应的依赖项和目标列表,makefile,Makefile,在makefile中,假设我有两个对应的依赖项和目标列表,如下所示: SRC = x.c y.c z.c OBJS = x.o y.o z.o x.o: x.c y.o: y.c z.o: z.c 当然,我的示例比这更复杂,但我想知道是否可以根据x.c、y.c、z.c分别自动创建目标x.o、y.o、z.o,如下所示: SRC = x.c y.c z.c OBJS = x.o y.o z.o x.o: x.c y.o: y.c z.o: z.c 您可以使用: 或: 我认为问题在于如何为每个

在makefile中,假设我有两个对应的依赖项和目标列表,如下所示:

SRC = x.c y.c z.c
OBJS = x.o y.o z.o
x.o: x.c
y.o: y.c
z.o: z.c
当然,我的示例比这更复杂,但我想知道是否可以根据x.c、y.c、z.c分别自动创建目标x.o、y.o、z.o,如下所示:

SRC = x.c y.c z.c
OBJS = x.o y.o z.o
x.o: x.c
y.o: y.c
z.o: z.c
您可以使用:

或:


我认为问题在于如何为每个目标创建规则,而不是如何从
SRC
创建
OBJS
(尽管这样做很好!)

最简单的方法是使用make中已经内置的规则,它知道如何操作;你不需要自己写。只需使用:

all: $(OBJS)
它们都会被创造出来。您可以通过设置
CC
变量来控制编译器,通过设置
cppfags
变量来控制预处理器标志,通过设置
CFLAGS
变量来控制其他编译器标志

如果您确实想编写自己的规则,那么模式规则将很容易为您编写:

%.o : %.c
        $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
%.o:%.c
$(CC)$(CPPFLAGS)$(CFLAGS)-c-o$@$<

我已经从SRC创建了obj。问题是源文件都在不同的目录中。所以我认为最好的方法是为每个源目录创建多个模式规则?如果有更多的情况,你应该把它放到问题中去。是否希望对象与源显示在同一目录中?如果是这样的话,那么上述操作将按原样进行。如果你想在不同的目录中创建对象,那么是的,你必须为每个不同的目录创建不同的规则。对象应该在它们自己的目录中,源在不同的目录中,所以我决定制定不同的模式规则。