views:

494

answers:

2

At the beginning of a makefile I have this line :

PATH := $(PATH):/other/dir

and this gives this error: Recursive variable 'PATH' references itself. What do I have to do so it works?

+3  A: 

GNU make (and many others) has two main ways of assigning values to variables. They differ according to the operator which you use. According to the documentation, a single equals sign (=) will cause a recursive expansion of the value, whereas a colon-equals (:=) will cause a simple expansion.

Your quoted code uses a := and so should cause a simple expansion. What you are seeing is an error message associated with a recursive expansion. I would expect that sort of error if you had something like this:

PATH = $(PATH):/other/dir

Could the error be being caused by a different line in your makefile which you haven't quoted? If you're sure that your cut-and-pasting is correct, and that it is this line which is causing the problem, it would be helpful if we could see the whole, unedited makefile.

Tim
I tried every way I could think of to add new folders to the path, while retaining the ones already existing. No luck. Finally, I settled on hardcoding the needed directories in the PATH.
Geo
@Geo , if you didn't understanc and try what Tim suggested, it doesn't make his answer incorrect and not worth accepting.
Pavel Shved
A: 

try changing $(PATH) to ${PATH}

Pablo