help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to limit the assignment of variable from command line only to th


From: Paul Smith
Subject: Re: How to limit the assignment of variable from command line only to the current makefile?
Date: Thu, 14 Jul 2011 10:43:49 -0400

On Wed, 2011-07-13 at 11:06 -0500, Peng Yu wrote:
> The variable assigned in the parent makefile will be carried on to the
> child makefile.

No it won't.

> $ cat Makefile
> .PHONY: all
> 
> XX:=abc
> 
> $(info $(XX))
> 
> all:
>       $(MAKE) -C dir
> 
> $ cat dir/Makefile
> .PHONY: all
> 
> XX:=abc
> 
> $(info $(XX))
> 
> all:
> 
> $ make XX=100

You ran this with "XX=100" on the command line.  Command line settings
have the highest priority and always take precedence over values set in
the makefile.  They are also always passed down to sub-makes and so
override those as well; this allows things like "make CFLAGS=-O2" to
work properly.

As pointed out earlier, you can use "override" in a makefile if you want
to set a variable in a makefile overriding everything, even command line
settings--but I do not recommend this.

If you'd run "make" by itself you'd see that the assignment in the upper
level makefile does not take precedence over the one in the sub-make.

Similarly if you'd run "make XX=xyz" instead of "make XX=100" (so the
value of XX on the command line is not exactly the same setting as in
the top makefile) you'd see the output as "xyz" instead of "100" and it
would be clear what was happening.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]