单一为不同目录中的多个输出文件制定规则



说我有一个带有C文件的目录(.),我希望对象文件最终以两个不同的目录:调试和发布。现在,我想为此制定规则。这最终将成为这样的事情:

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

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

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

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

你做不到。带有多个目标的模式规则定义了一个食谱,该食谱一次运行一次时会创建多个输出文件。

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

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

最新更新