2009-05-04 20 views
5

sto tipo di bloccato qui. Abbiamo due makefile (un requisito che non posso cambiare)Le variabili automatiche nelle prove di condizionali: GNU Make

  • defs.mk: Contiene i nomi dei file sorgente & loro flag di compilazione in più (a parte le bandiere normali) ad esempio:
 
C_FILES = c/src/main/rule_main.c 
rule_main_OPTIONAL_FLAG = +w127 
rule_main_DEBUG = TRUE 
  • Makefile: Contiene tutte le regole.

Ora voglio aggiungere una struttura in modo che posso definire flag specifici di file (e file di optional specifici bandiera debug) come in:

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

Ma questo non sta funzionando in quanto l'espansione di variabili automatiche non è supportato nei condizionali. c'è un altro modo per farlo?

risposta

5

solito prendo vantaggio di conditional functions:

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

o utilizzare call function definire la mia propria funzione:

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

%.o: src/$$(notdir %).c 
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename [email protected])) 
+0

Grazie, funzioni condizionali funzionano come un fascino. -Saurabh – Saurabh

Problemi correlati