2016-09-22 1 views
0

Я использую GNUmake, и у меня есть файл makefile с определенными целевыми параметрами и их соответствующими зависимостями. Я хотел бы создать отладочную версию этих целей, так что у меня это:Создавать отладочные версии целей по DRY-методу

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

Так что я, наконец, нашел подходящее решение:

DEBUG_TARGET := $(TARGET:%=debug_%) 

debug: $(DEBUG_TARGET) 

$(DEBUG_TARGET): 
debug_%: CFLAGS += -g -DDEBUG 
debug_%: % 
    @mv $* debug_$* 

Это будет генерировать отладочную версию каждой цели без необходимости создавать отдельные правила.

Последняя линия была для меня приятным местом, и это делает то, что я хотел, не повторяя слишком много.

Смежные вопросы