Variáveis automáticas nos testes de condicionais:GNU Make
Pergunta
Estou meio preso aqui.Temos dois makefiles (um requisito que não posso alterar)
- defs.mk:Ele contém os nomes dos arquivos de origem e seus sinalizadores de compilação extras (além dos sinalizadores padrão), por exemplo:
C_FILES = c/src/main/rule_main.c rule_main_OPTIONAL_FLAG = +w127 rule_main_DEBUG = TRUE
Makefile
:Ele contém todas as regras.
Agora quero adicionar um recurso para que eu possa definir sinalizadores específicos de arquivo (e sinalizador de depuração específico de arquivo opcional) como em:
CUSTOM_DEBUG_FLAG = $($(basename $(notdir $@))_DEBUG) ## rule_main_DEBUG macro from defs.mk
ifeq ($(CUSTOM_DEBUG_FLAG),TRUE)
do something
endif
Mas isso não está funcionando, pois a expansão de variáveis automáticas não é suportada em condicionais.Existe alguma outra maneira de fazer isso?
Solução
Eu costumo aproveitar funções condicionais:
SPECIFIC_FLAGS=$(if $(findstring $(CUSTOM_FLAG),TRUE),$(IF_TRUE),$(IF_FALSE))
Ou use função de chamada para definir minha própria função:
debug_defs=$(if $(findstring $(1),file1 file2),-DDEBUG,-DNDEBUG)
%.o: src/$$(notdir %).c
@cc -c $(CFLAGS) $(call debug_defs,$(notdir $(basename $@))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow