Pregunta

Estoy un poco atrapado aquí. Tenemos dos makefiles (un requisito que no puedo cambiar)

  • defs.mk: contiene los nombres de los archivos de origen & amp; sus banderas de compilación adicionales (aparte de las banderas estándar), por ejemplo:
C_FILES = c/src/main/rule_main.c
rule_main_OPTIONAL_FLAG = +w127
rule_main_DEBUG = TRUE
  • Makefile : contiene todas las reglas.

Ahora quiero agregar una instalación para poder definir indicadores específicos de archivo (y un indicador de depuración específico de archivo opcional) como en:

CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
  do something
endif

Pero esto no funciona, ya que la expansión de variables automáticas no es compatible con los condicionales. ¿Hay alguna otra manera de hacerlo?

¿Fue útil?

Solución

Normalmente aprovecho funciones condicionales :

SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))

O use función de llamada para definir mi propia función:

debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)

%.o: src/$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top