Автоматические переменные в тестах условных операторов:GNU Сделать
Вопрос
Я как бы застрял здесь.У нас есть два make-файла (требование, которое я не могу изменить)
- defs.mk:Он содержит имена исходных файлов и их дополнительные флаги компиляции (помимо стандартных флагов), например:
C_FILES = c/src/main/rule_main.c rule_main_OPTIONAL_FLAG = +w127 rule_main_DEBUG = TRUE
Makefile
:Там есть все правила.
Теперь я хочу добавить объект, чтобы я мог определить конкретные флаги файла (и необязательный флажок конкретного файла отладки) как в:
CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
do something
endif
Но это не работает, поскольку расширение автоматических переменных не поддерживается в условных выражениях.Есть ли другой способ сделать это?
Решение
Я обычно пользуюсь условные функции:
SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))
Или используйте функция вызова чтобы определить мою собственную функцию:
debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)
%.o: src/$$(notdir %).c
@cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
Не связан с StackOverflow