Автоматические переменные в тестах условных выражений: GNU Make - PullRequest
5 голосов
/ 04 мая 2009

Я застрял здесь. У нас есть два make-файла (требование, которое я не могу изменить)

  • defs.mk: содержит имена исходных файлов и их дополнительные флаги компиляции (кроме стандартных флагов), например ::10000
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

Но это не работает, так как раскрытие автоматических переменных не поддерживается в условных выражениях. Есть ли другой способ сделать это?

1 Ответ

5 голосов
/ 04 мая 2009

Я обычно пользуюсь условными функциями :

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 $@))
...