web-dev-qa-db-fra.com

Bash est anormal dans Makefile!

tout,

J'ai constaté que le même Makefile fonctionne bien sous Mac OS X mais ne fonctionne pas sous Ubuntu. L'extrait est le suivant:

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

et make se plaint:

/bin/sh: [[: not found

Une idée?

À votre santé,

Li


Mises à jour:

J'ai changé les instructions Bash conditionnelles ci-dessus en:

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

alors les choses fonctionnent bien. Alors, quel est le problème avec "[["?

5
Li Dong

Les makefiles utilisent sh par défaut, pas bash.

Dans Ubuntu, sh pointe sur dash, un shell minimaliste et conforme à POSIX, ne fournissant pas le travail de clé [[.

7
enzotib

Placez ceci au sommet de votre Makefile:

Shell := /bin/bash # Use bash syntax

Cela est dû au fait que [[ est une commande intégrée de bash et que vous l'exécutez avec sh. La ligne ci-dessus définira bash comme interpréteur par défaut pour les commandes exécutées sur le fichier makefile.

7
Robin Winslow