7

all,

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

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

and make complains:

/bin/sh: [[: not found

Any idea?

Cheers,

Li


Updates:

I have changed the above conditional Bash statements to:

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

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

1
  • Same goes for printf %q, dash has a builtin that does not support %q. Jul 4, 2023 at 12:45

2 Answers 2

10

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.

7

Makefiles use sh by default, not bash.

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

1
  • So we should limit the scripts in the Makefile. Thanks!
    – Li Dong
    Jan 14, 2012 at 15:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .