2009-05-04 7 views
5

Je suis coincé ici. Nous avons deux makefile (une exigence que je ne peux pas changer)Variables automatiques dans les tests de conditionnels: GNU Make

  • defs.mk: Il contient les noms de fichiers source & leurs drapeaux de compilation supplémentaires (en dehors des drapeaux standards), par exemple:
 
C_FILES = c/src/main/rule_main.c 
rule_main_OPTIONAL_FLAG = +w127 
rule_main_DEBUG = TRUE 
  • Makefile: Il contient toutes les règles.

Maintenant, je veux ajouter une installation afin que je puisse définir fichier drapeaux spécifiques (et fichier facultatif indicateur de débogage spécifique) comme dans:

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

Mais cela ne fonctionne pas depuis l'expansion des variables automatiques n'est pas supporté dans les conditions. Y a-t-il un autre moyen de le faire?

Répondre

5

Je prends habituellement avantage de conditional functions:

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

Ou utiliser call function pour définir ma propre fonction:

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

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

Merci, les fonctions conditionnelles fonctionnent comme un charme. -Saurabh – Saurabh

Questions connexes