I read this question, and I was surprised it wasn't working:
Why GNU Make canned recipe doesn't work?
So I tried it myself and got the same results. Here's an example makefile:
define foo bar baz endef define bar = foo baz endef $(info foo: $(foo)) $(info bar: $(bar)) all:
And here's the output from running it:
$ make foo: bar baz bar: make: Nothing to be done for `all'.
What's happening here? The GNU make manual seems to indicate that these two variable declarations should be the same - what am I missing here?
Edit:
Some quotations from the manual that I was referring to:
3.7 How make Reads a Makefile
define immediate deferred endef define immediate = deferred endef
5.8 Defining Canned Recipes
Here is an example of defining a canned recipe:
define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef
6.8 Defining Multi-Line Variables
... You may omit the variable assignment operator if you prefer. If omitted, make assumes it to be ‘=’ and creates a recursively-expanded variable...
As you can see, the canned recipes section explicitly uses the =
case. I'm using GNU Make 3.81.
From the CHANGELOG in 3.82:
* read.c (do_define): Modify to allow assignment tokens (=, :=, etc.) after a define, to create variables with those flavors.
It seems like using '=' isn't supported prior to that in define statements
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With