I have found that the same Makefile works well in Mac OS X, but does not work in Ubuntu. The snippet is as following:

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

and make complains:

/bin/sh: [[: not found

Any idea?




I have changed the above conditional Bash statements to:

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

then things work fine. So what is wrong with "[["?


Makefiles use sh by default, not bash.

In Ubuntu sh point to dash, a POSIX compliant and minimalistic shell, not providing the [[ keywork.

| improve this answer | |
  • So we should limit the scripts in the Makefile. Thanks! – Li Dong Jan 14 '12 at 15:09

Place this at the top of your Makefile:

SHELL := /bin/bash # Use bash syntax

This happens because [[ is a builtin command of bash and you're running it with sh. The above line will set bash as default interpreter for the commands ran on makefile.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.