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

时间:2016-06-24 09:43:19

标签: makefile gnu-make

假设我有一个带有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编译DEBUG时编译的o文件。如何将这两个规则合并为一个?

1 个答案:

答案 0 :(得分:1)

你不能这样做。具有多个目标的模式规则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)