[Top][All Lists]
[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