Makefile 不同目录中多个输出文件的单一生成规则

Makefile 不同目录中多个输出文件的单一生成规则,makefile,gnu-make,Makefile,Gnu Make,假设我有一个包含c文件的目录(),我希望目标文件最终位于两个不同的目录中:debug和release。现在我想为这个制定规则。最终会是这样的: $(DEBUGDIR)%.o : %.c $(CC) $(CFLAGS) -c $< -o $@ $(RELEASEDIR)%.o : %.c $(CC) $(CFLAGS) -c $< -o $@ 但是现在,当它已经为DEBUG编译时,它不会为RELEASE编译o文件。如何将这两条规则合并为一条?您不能这样做。具有多个目

假设我有一个包含c文件的目录(
),我希望目标文件最终位于两个不同的目录中:debug和release。现在我想为这个制定规则。最终会是这样的:

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

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

但是现在,当它已经为
DEBUG
编译时,它不会为
RELEASE
编译o文件。如何将这两条规则合并为一条?

您不能这样做。具有多个目标的模式规则

为此,我只需写两次规则。或者,您可以将配方放入变量并使用两次:

COMPILE = $(CC) $(CFLAGS) -c $< -o $@

$(DEBUGDIR)%.o : %.c
        $(COMPILE)

$(RELEASEDIR)%.o : %.c
        $(COMPILE)
COMPILE=$(CC)$(CFLAGS)-c$<-o$@
$(DEBUGDIR)%.o:%.c
$(编译)
$(RELEASEDIR)%.o:%.c
$(编译)

你做不到。具有多个目标的模式规则

为此,我只需写两次规则。或者,您可以将配方放入变量并使用两次:

COMPILE = $(CC) $(CFLAGS) -c $< -o $@

$(DEBUGDIR)%.o : %.c
        $(COMPILE)

$(RELEASEDIR)%.o : %.c
        $(COMPILE)
COMPILE=$(CC)$(CFLAGS)-c$<-o$@
$(DEBUGDIR)%.o:%.c
$(编译)
$(RELEASEDIR)%.o:%.c
$(编译)