Изменение значения переменной Makefile внутри целевого тела
Есть ли способ переназначить значение переменной Makefile внутри целевого тела?
То, что я пытаюсь сделать, это добавить дополнительные флаги для компиляции отладки:
%.erl: %.beam
$(ERLC) $(ERLFLAGS) -o ebin $<
test: clean debug_compile_flag compile compile_test
debug_compile:
$(ERLCFLAGS) += -DTEST
Итак, если я вызываю тестовую цель, я бы хотел очистить среду, добавить новые флаги (например, -DTEST к существующим), скомпилировать весь код еще раз (первые источники, затем тестовые модули).
Я не хочу копировать/вставлять код для компиляции с некоторыми новыми флагами, так как здесь много логики.
Есть ли простой способ переопределить значение переменной, чтобы я мог повторно использовать существующий код?
Ответы
Ответ 1
Изменить. Как объясняется Beta в другом ответе, это возможно.
Нет. В Makefile нет способа сделать это. Однако вы можете изменить значение переменной в командной строке make
. Если вы переписываете свой Makefile следующим образом:
ERLCFLAGS += $(ERLCFLAGSADDED)
%.erl: %.beam
$(ERLC) $(ERLCFLAGS) -o ebin $<
test: clean compile compile_test
Затем вы можете вызвать make для выполнения своих тестов, используя:
make ERLCFLAGSADDED=-DTEST test
Ответ 2
Да, есть простой способ сделать это и без повторного использования Make. Используйте значение переменной для цели:
test: clean debug_compile
debug_compile: ERLCFLAGS += -DTEST
debug_compile: compile compile_test;
Ответ 3
Другой ответ здесь: Определить переменную make во время выполнения правила.
Для ленивых вы можете иметь такие правила, как следующие (FLAG
и DEBUG
- мои переменные):
.DBG:
$(eval FLAG += $(DEBUG))