Como usar o comando echo in shell do Makefile?

2

Eu tenho um makefile do GNU . Ele roda bem no Linux, Solaris e OS X. No entanto, no Cygwin-32, Cygwin-64 e MinGW, ele produz:

/bin/sh: -c: line 0: syntax error near unexpected token '('
/bin/sh: -c: line 0: 'echo 2.0.4(0.287/5/3) | egrep -i -c "fc22.i686"'

Não há linha 0; e o teste para o Fedora 22 ocorre na linha 73:

IS_FEDORA22_i686 = $(shell echo $(RELEASE) | $(EGREP) -i -c "fc22.i686")

O que está acontecendo com o Cygwin e o MinGW? Mais importante, como posso consertar isso?

Eu sei que parece um trecho, então aqui está uma captura de tela. O canto superior esquerdo é MinGW. O centro é o Cygwin-32. O canto inferior direito é o Cygwin-64.

    
por jww 25.07.2015 / 11:55

1 resposta

2

O problema é que o shell está vendo os parênteses em $RELEASE fora de qualquer aspas, então está tentando interpretá-los. Duas coisas para tentar: colocar aspas duplas em torno da referência a $(RELEASE) e usar := por isso . Por exemplo:

SHELL:=/bin/bash.  #at the top of the makefile
IS_FEDORA22_i686 := $(shell echo "$(RELEASE)" | $(EGREP) -i -c "fc22.i686")

Editar: saída de uname com opções como -m geralmente não tem quaisquer metacaracteres de shell. O mesmo problema pode acontecer com qualquer variável que tenha. É por isso que é útil definir SHELL no seu makefile - se o usuário estiver executando csh , você terá problemas diferentes do que com bash .

    
por 25.07.2015 / 12:11