2009-05-04 22 views
5

Estoy algo atrapado aquí. Tenemos dos archivos make (un requisito que no puedo cambiar)Variables automáticas en las pruebas de condicionales: GNU Make

  • defs.mk: Contiene los nombres de los archivos fuente & 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 añadir una facilidad para que pueda definir indicadores específicos de archivo (y la bandera de depuración específica archivo opcional) como en:

CUSTOM_DEBUG_FLAG = $($(basename $(notdir [email protected]))_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 condicionales. ¿Hay alguna otra forma de hacerlo?

Respuesta

5

normalmente tomar ventaja de conditional functions:

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

o uso call function 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 [email protected])) 
+0

Gracias, funciones condicionales funcionan como un amuleto. -Saurabh – Saurabh

Cuestiones relacionadas