Автоматические переменные в тестах условных операторов:GNU Сделать

StackOverflow https://stackoverflow.com/questions/819700

  •  03-07-2019
  •  | 
  •  

Вопрос

Я как бы застрял здесь.У нас есть два 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 $@))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top