Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make error for ifeq: syntax error near unexpected token

Tags:

makefile

I'm writing a Makefile that does string matching at one place, the code is like:

if test ...; \     then \     shell scripts... \ fi  ifeq ($(DIST_TYPE),nightly)     shell scripts ... endif 

Here the first if is shell script, the second ifeq is GNU Make's conditional. However the following error generates:

ifeq (nightly,nightly)

/bin/sh: -c: line 0: syntax error near unexpected token `nightly,nightly'

/bin/sh: -c: line 0: `ifeq (nightly,nightly)'

What's happening here? It seems that Make is trying to call the shell.

like image 979
Ryan Li Avatar asked Dec 19 '10 14:12

Ryan Li


People also ask

What Is syntax error near unexpected token?

Why the Bash unexpected token syntax error occurs? As the error suggests this is a Bash syntax error, in other words it reports bad syntax somewhere in your script or command. There are many things that can go wrong in a Bash script and cause this error.

How do I use IFEQ in Makefile?

The ifeq directive begins the conditional, and specifies the condition. It contains two arguments, separated by a comma and surrounded by parentheses. Variable substitution is performed on both arguments and then they are compared.


2 Answers

I played around the code and found that the conditional statements should be written without indentation, and this solved my problem.

If there is no indentation, Make will treat it as a directive for itself; otherwise, it's regarded as a shell script.

Example code

Wrong:

target:     ifeq (foo, bar)         ...     endif 

Correct:

target: ifeq (foo, bar)     ... endif 
like image 169
Ryan Li Avatar answered Sep 21 '22 16:09

Ryan Li


In addition, if the conditional statements is used in define functions, like:

define myFunc ifeq (foo, bar)     ... endif endef 

In this case, Make will also treat it as a shell script.

This problem can be solved by using if-function instead:

define myFunc     $(if condition,then-part[,else-part]) endef 
like image 39
SenZhang Avatar answered Sep 22 '22 16:09

SenZhang