Never mind, I get it. I re-read what you said the first time -- the entire recipe is expanded before it starts going through it, so if I used that variable in a different recipe then I would get my expected results.
Thanks! --Marc On Mon, Nov 14, 2011 at 11:39 AM, Marc Smith <[email protected]> wrote: > On Mon, Nov 14, 2011 at 11:26 AM, Paul Smith <[email protected]> wrote: >> On Mon, 2011-11-14 at 11:17 -0500, Marc Smith wrote: >>> Did that behavior change recently in GNU make? >> >> No. >> >>> I've been reading the O'Reilly book titled Managing Projects with GNU >>> Make (3rd edition) and on page 70 it gives this example to highlight >>> the difference between simple/recursive variables with the shell >>> function: >>> >>> START_TIME := $(shell date) >>> CURRENT_TIME = $(shell date) >>> "The START_TIME variable causes the date command to execute once when >>> the variable is defined. The CURRENT_TIME variable will reexecute date >>> each time the variable is used in the makefile." >> >> Sure. But that's at all the same thing as what you did. What you did >> is this: >> >>>> blah = $(shell date) >>>> all: >>>> @ echo $(blah) >>>> @ sleep 10 >>>> @ echo $(blah) >> >> In the O'Reilly book they are using first a simple variable which has >> immediate expansion, so START_TIME is evaluated when the makefile is >> read in, while END_TIME is a recursive variable and not evaluated until >> the variable is used. >> >> Your example puts the variables in the same recipe twice. You are >> assuming that make will expand the first line of the recipe, run it, >> expand the second line of the recipe, run that, then expand the third >> line of the recipe and run that. > > Gotcha, I'm not trying to be difficult, just wrapping my head around this. =) > So, something like this should yield different values: > > --snip-- > blah := $(shell date) > blah2 = $(shell date) > > all: > @ echo $(blah) > @ sleep 10 > @ echo $(blah2) > --snip-- > > Right? > > Is there another way to use the same variable and have the shell > function execute each time the variable is used in a makefile? > > Thanks for your help. > > > --Marc >> >> But that's not how GNU make works, nor has it ever worked that way. >> Instead, make expands the first, second, and third lines at the same >> time and then runs the first one, then the second, then the third in >> order. >> >> -- >> ------------------------------------------------------------------------------- >> Paul D. Smith <[email protected]> Find some GNU make tips at: >> http://www.gnu.org http://make.mad-scientist.net >> "Please remain calm...I may be mad, but I am a professional." --Mad >> Scientist >> >> > _______________________________________________ Help-make mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-make
