У вас есть несколько вариантов / способов сделать это.
- Один быстрый способ - проверить содержимое
MAKECMDGOALS
(это слова после make
, например, release или debug),Примечание: их может быть больше одного, но если ваш make-файл прост и имеет только один, будет работать следующее:
например:
ifneq ($(MAKECMDGOALS),debug)
TGT_DIR = $(DBG_DIR)
OBJ_DIR = $(OBJ_ROOT_DIR)/$(TGT_DIR)
OBJS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(SRC_LIST))
endif
Другой вариант - использовать второе расширение, я просто добавлю ссылку: вторичное расширение
Еще один вариант - настроитьпеременных в вашем правиле, затем экспортируйте их и снова вызовите make (рекурсивно), возможно, что-то вроде этого:
например (не полностью):
# Note you can just export the ones you want but... for ease of the example:
.EXPORT_ALL_VARIABLES
debug: TGT_DIR = $(DBG_DIR)
debug: OBJ_DIR = $(OBJ_ROOT_DIR)/$(TGT_DIR)
debug: OBJS = $(patsubst %.cc, $(OBJ_DIR)/%.o, $(SRC_LIST))
debug:
$(MAKE) do_build
do_build: $(OBJS)
...etc...
Где в вашемпервый вызов, чтобы настроить некоторые переменные в правиле отладки.Во втором он вызывает do_build напрямую и переменные уже настроены.На рекурсивную марку обычно нахмурились - но я обнаружил, что во многих случаях это самый простой способ сделать определенные вещи.
Я бы, вероятно, ошибся в выборе варианта 1. для его простоты.Есть еще больше способов сделать это, но это в некоторой степени зависит от того, как вы хотите работать - я просто устанавливаю некоторые параметры, которые сохраняют структуру вашего make-файла более или менее неизменной ...