help-make
[Top][All Lists]
Advanced

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

Re: Variable assignment that depends on a generated target


From: Paul Smith
Subject: Re: Variable assignment that depends on a generated target
Date: Tue, 24 Apr 2007 21:57:28 -0400

On Wed, 2007-04-25 at 00:00 +0000, David Wuertele wrote:
> I thought of that, but I also want to have another target use the\
> VERSION variable:
> 
> /path/to/some/other/target-$(VERSION).img: $(dependencies); touch
> $<at>
> 
> The problem is that VERSION isn't getting set in time.  I want to
> create the file that VERSION depends on before this rule gets
> evaluated.

You can't do that.  Makefiles are read in before ANY targets are built,
and target and prerequisites are fully expanded as they are read in.
There is no way for make to run a rule before expanding all the
makefiles.


Except, by using include.  Make has a very special feature that it will
automatically try to rebuild all included files, and if any do get
rebuilt then make will re-exec itself to read them in.

So, you could do something like this:

        include version.mk

        version.mk : /path/to/some/file
                echo "VERSION = `grep VERSION $<`" > $@

Obviously that grep is not really what you want but you get the idea.
Now, make will rebuild the version.mk file every time /path/to/some/file
changes (and, /path/to/some/file itself will be tested to see if it also
needs to be rebuilt first, just as any other target).  If it does
change, then make will re-exec itself to read in the new content of
version.mk.

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




reply via email to

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