Variables automáticas en las pruebas de condicionales: GNU Make.
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?
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