假设我有一个带有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文件。如何将这两个规则合并为一个?
答案 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)