Pergunta

Gostaria de habilitar uma compilação detalhada em meu makefile, mas não consigo descobrir como fazer uma compilação condicional OR.

Deixe-me explicar:Quero poder especificar um detalhado compilação por configuração V=1 ou VERBOSE=1.eu quero manter VERBOSE=1 disponível porque temos alguns scripts que fazem uso dele (e usamos outros makefiles apenas cientes de VERBOSE)

Portanto, o resultado deve ser que esses dois comandos sejam iguais:

make all VERBOSE=1 # pain to write
make all V=1

Agora, meu makefile está assim hoje:

ifdef VERBOSE
[issue compilation commands with verbose mode]
endif

O que eu gostaria de alcançar está próximo do pré-processador em C:

if defined(VERBOSE) || defined(V)
[issue compilation commands with verbose mode]
endif

voce sabe como fazer isso?

Foi útil?

Solução

Eu gosto disso:

ifneq "$(or $(LINUX_TARGET),$(OSX_TARGET))" ""

endif

Semelhante à abordagem $(strip, mas usando a abordagem mais intuitiva $(ou palavra-chave

Outras dicas

VERBOSE := $(or $(VERBOSE),$(V))

...então...

ifeq ($(VERBOSE),1)
#Conditional stuff
endif

Até onde eu sei, o material condicional no GNU make não permite ORs e ANDS.Você sempre pode fazer algo como:

ifdef VERBOSE
DOVERBOSE = yes
endif
ifdef V
DOVERBOSE = yes
endif

ifeq( $DOVERBOSE, yes )
    main verbose stuff here
endif

mas não vejo por que você precisa introduzir a definição (dificilmente autodocumentada) de V em primeiro lugar.

Gosto da abordagem de Neil Butterworth, mas se você realmente quiser fazer isso no estilo que descreve, isso lhe dará OR:

ifneq "$(strip $(VERBOSE) $(V))" ""
[be verbose]
endif

Ok, muito tarde para a festa, mas me deparei com isso e queria adicionar outra solução para outras pessoas que estavam procurando como adicionar lógica aos makefiles:basicamente, faça a lógica em um shell e obtenha a saída dessa forma.

ifneq ( $(shell ( [ $(VERBOSE) ] || [ $(V) ] ) && echo y ),)

parece mais complicado, mas se você tiver uma instrução if com muitos ands e ors, isso oferece muita flexibilidade e seria mais fácil de ler do que $(and .. aninhados).$(ou ...)) declarações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top