不同目录中多个输出文件的单个 make 规则

Single make rule for multiple output files in different directories

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

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

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

这是两条完全相同的规则。由于这些规则之间所有可能的差异都包含在 CFLAGS 中,因此没有理由甚至有两个规则:我只想维护一个。我试过这个:

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

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

你做不到。具有多个目标的模式规则 define a recipe that creates multiple output files when run one time.

为此我只写了两次规则。或者,您可以将食谱放入变量中并使用它两次:

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

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

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