%% Ryan Berdeen <[EMAIL PROTECTED]> writes: rb> I've just started using GNU make (3.80), and I'm confused why the rb> following doesn't work:
rb> $(TARGETS): target := $@ rb> The target variable remains empty. That's because you're using simple assignment, which evaluates the right hand side immediately as the makefile is read in. See the section on "How make Reads a Makefile" in the GNU make manual to understand the difference between immediate and deferred expansion. rb> According to the manual, "All variables that appear within the rb> variable-assignment are evaluated within the context of the rb> target" (http://www.gnu.org/software/make/manual/html_chapter/ rb> make_6.html#SEC77). As far as I have been able to determine, inside rb> the context of the target, $@ contains the name of the target. Yes... but that value is not set until make actually tries to build the target. By using := you're forcing to the expansion to happen when the makefile is read; at that time the automatic variables are not set yet. I suppose this isn't as clear as it could be in the manual. rb> target1: target = target1 rb> target2: target = target2 If you would have written your first example like this, using recursive variable assignment (=) instead of simple assignment (:=), it would have worked: target1 : target = $@ will do what you want. However, I find this whole thing rather useless... why don't you just use $@ directly instead of creating a different variable named "target" for it? -- ------------------------------------------------------------------------------- Paul D. Smith <[EMAIL PROTECTED]> Find some GNU make tips at: http://www.gnu.org http://make.paulandlesley.org "Please remain calm...I may be mad, but I am a professional." --Mad Scientist _______________________________________________ Help-make mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-make
