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 \
, тогда все работает нормально , Итак, что не так с "[[??
Makefiles использует sh по умолчанию, а не bash.
В Ubuntu sh указывается на dash, совместимая с POSIX и минималистическая оболочка, не предоставляющая ключевое слово [[. [ ! d1]
Поместите это вверху вашего Makefile:
SHELL := /bin/bash # Use bash syntax
Это происходит, потому что [[ является встроенной командой bash, и вы запускаете ее с помощью sh. Вышеприведенная строка установит bash в качестве интерпретатора по умолчанию для команд, запущенных в make-файле.
Поместите это вверху вашего Makefile
:
SHELL := /bin/bash # Use bash syntax
Это происходит, потому что [[
является встроенной командой bash
, и вы запускаете ее с помощью sh
. Вышеприведенная строка установит bash
в качестве интерпретатора по умолчанию для команд, запущенных в make-файле.