不同目录中多个输出文件的单个 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)
假设我有一个包含 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)