Bash ненормален в Makefile!

all,

Я обнаружил, что тот же Makefile хорошо работает в Mac OS X, но не работает в Ubuntu. Этот фрагмент следующий:

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

и make жалуется:

/bin/sh: [[: not found

Любая идея?

Приветствия,

Li


Обновления:

Я изменил приведенные выше условные операторы Bash на:

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

, тогда все работает нормально , Итак, что не так с "[[??

4
задан 14 January 2012 в 18:47

3 ответа

Makefiles использует sh по умолчанию, а не bash.

В Ubuntu sh указывается на dash, совместимая с POSIX и минималистическая оболочка, не предоставляющая ключевое слово [[. [ ! d1]

6
ответ дан 25 May 2018 в 15:11
  • 1
    Поэтому мы должны ограничить скрипты в Makefile. Благодаря! – Li Dong 14 January 2012 в 21:09

Поместите это вверху вашего Makefile:

SHELL := /bin/bash # Use bash syntax

Это происходит, потому что [[ является встроенной командой bash, и вы запускаете ее с помощью sh. Вышеприведенная строка установит bash в качестве интерпретатора по умолчанию для команд, запущенных в make-файле.

6
ответ дан 25 May 2018 в 15:11

Поместите это вверху вашего Makefile:

SHELL := /bin/bash # Use bash syntax

Это происходит, потому что [[ является встроенной командой bash, и вы запускаете ее с помощью sh. Вышеприведенная строка установит bash в качестве интерпретатора по умолчанию для команд, запущенных в make-файле.

7
ответ дан 2 August 2018 в 02:09

Другие вопросы по тегам:

Похожие вопросы: