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 [[
.
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 "[["?
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 [[
.
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.