Bash é anormal no Makefile!

4

tudo,

Eu descobri que o mesmo Makefile funciona bem no Mac OS X, mas não funciona no Ubuntu. O snippet é o seguinte:

start:
    @echo $(seperator)
    @if [[ "$(PROJECT)" == "" ]]; then \
         echo " Project powered by CodeMate!"; \
     else \
         echo "  $(PROJECT)"; \
     fi
    @echo $(seperator)

e make reclama:

/bin/sh: [[: not found

Alguma ideia?

Felicidades,

Li

Atualizações:

Alterei as declarações Bash condicionais acima para:

if test "$(PROJECT)" = ""; then \

as coisas funcionam bem. Então, o que há de errado com "[["?

    
por Li Dong 14.01.2012 / 13:12

2 respostas

6

Makefiles usam sh por padrão, não bash .

No Ubuntu sh aponte para dash , um shell compatível com POSIX e minimalista, não fornecendo o keywork [[ .

    
por enzotib 14.01.2012 / 14:20
7

Coloque isso na parte superior de seu Makefile :

SHELL := /bin/bash # Use bash syntax

Isso acontece porque [[ é um comando interno de bash e você está executando com sh . A linha acima definirá bash como intérprete padrão para os comandos executados no makefile.

    
por Robin Winslow 19.05.2015 / 16:53