我正在使用GNUmake,我有一个makefile,其中定义了一些目标及其各自的依赖项。我想创建这些目标的调试版本,所以我有这个:
TARGET := a b c
all: $(TARGET)
a: a.o e.o
$(CC) $(CFLAGS) $(INCDIRS) -c $(^) -o $(@)
b: b.o g.o
$(CC) $(CFLAGS) $(INCDIRS) -c $(^) -o $(@) -pthread
c: f.o c.o
$(CC) $(CFLAGS) $(INCDIRS) -lm -c $(^) -o $(@)
%.o: %.c
$(CC) $(CFLAGS) $(INCDIRS) -c $(^) -o $(@)
所以这一切都很好,但现在我想创建这些规则的调试版本,但我不想重写规则。我只想在-g -DDEBUG
变量中添加CFLAGS
等其他标记,并更改目标的名称。
我试过这个静态规则的东西
$(TARGET:%=debug_%): %: * #<--- not sure how to specify the dependencies
# CFLAGS += -g -DDEBUG <-- uncommenting this line is an error
这不起作用。我希望上面的规则与我已经指定的目标相匹配,但是向CFLAGS
添加其他参数,然后生成debug_a
,debug_b
,debug_c
等文件。我是不确定这是否可以使用make,但这只是我推理的方式。
任何帮助将不胜感激,谢谢
答案 0 :(得分:0)
所以我终于找到了合适的解决方案:
DEBUG_TARGET := $(TARGET:%=debug_%)
debug: $(DEBUG_TARGET)
$(DEBUG_TARGET):
debug_%: CFLAGS += -g -DDEBUG
debug_%: %
@mv $* debug_$*
这将生成每个目标的调试版本,而无需创建单独的规则。
最后一行是我的最佳点,这完成了我想要的,而不必重复太多