Question

Je suis un peu coincé ici. Nous avons deux makefiles (une exigence que je ne peux pas changer)

  • defs.mk: Il contient les noms de fichier source & amp; leurs drapeaux de compilation supplémentaires (en dehors des drapeaux standard), 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 souhaite ajouter une fonction pour pouvoir définir des indicateurs spécifiques à un fichier (et un indicateur de débogage facultatif spécifique à un fichier). comme dans:

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

Mais cela ne fonctionne pas car le développement de variables automatiques n'est pas pris en charge dans les conditions. Y a-t-il un autre moyen de le faire?

Était-ce utile?

La solution

Je profite généralement des fonctions conditionnelles :

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

Ou utilisez la fonction d'appel pour définir la vôtre fonction:

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

%.o: src/$(notdir %).c
    @cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top