Daniel Walker
Daniel Walker

Reputation: 6772

Make: evaluating result of call: recipe commences before first target

I have several files for my GNU make setup. In this.mk, I have

define this_template
THIS = $(1)
THIS_DIR = $(2)
THIS_LIBNAME = $(3)
THIS_EXTERNAL_DIRS = $(4)
...
endef

In my Makefile, I have

include this.mk
... # define VAR1 and VAR2
include util/make.mk
...

util/make.mk contains one line:

$(eval $(call this_template,UTIL,$(VAR1),plutil,$(VAR2)))

However, when I run make, I get

util/make.mk:1: *** recipe commences before first target. Stop.

Reading up on other questions that relate to this error message, what I'm understanding is that this error is caused by evaluating a string which begins in a way that looks like it's inside of a recipe. However, what I'm evaluating does not.

Upvotes: 0

Views: 673

Answers (1)

MadScientist
MadScientist

Reputation: 101131

This error means that (a) the line begins with a TAB (or more specifically, with the character defined as .RECIPE_PREFIX if your version of GNU make supports it), and (b) it is not recognized as any sort of make command such as a rule introduction, etc.

Given what you've shared with us here, that cannot happen. So there must be something going on that you haven't shared with us. Maybe one of the other included makefiles is modifying the this_template variable to contain something else.

The way to debug eval problems is always the same no matter what they are: change the eval to info so that make will print out what it will evaluate. This usually makes it pretty obvious what the problem is. So use:

$(info $(call this_template,UTIL,$(VAR1),plutil,$(VAR2)))
$(eval $(call this_template,UTIL,$(VAR1),plutil,$(VAR2)))

and see what make shows you.

Upvotes: 1

Related Questions