help-gnu-utils
[Top][All Lists]
Advanced

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

Re: gmake $(eval()) question.


From: Pascal Bourguignon
Subject: Re: gmake $(eval()) question.
Date: Fri, 29 Jun 2007 00:38:23 +0200
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.1.50 (gnu/linux)

gokrix@hotmail.com writes:

> Hi,
>
> I have the following Makefile which demonstrates my problem:
>
> ---------Begin Makefile------------
> HI=$(eval HELLO=Hello)
>
> all:server client
>
> server:
> <tab>@echo "HELLO: $(HELLO)"
> <tab>@echo "HI: $(HI)"
>
> client:
> <tab>@echo "HELLO: $(HELLO)"
> <tab>@echo "HI: $(HI)"
> -----------End Makefile------------
>
> If I run gmake, I get this output:
> HELLO:
> HI:
> HELLO: Hello
> HI:
>
> This thing that puzzles me is why the first line only contains
> "HELLO:".  As per my understanding, it should be the same as line 3.

This is not possible. When it execute the first echo "HELLO:
$(HELLO)", $(HI) has not been evaluated yet, so HELLO is not a
variable defined yet.


> If I run "gmake server" or "gmake client", I get:
> HELLO:
> HI:
>
> Again, I think the first line of output should be "HELLO: Hello"

Impossible, as above.


> So can anyone explain why this is happening?  I am running gmake 3.81
> on Fedora Core 6.

info gmake

= is a textual definition. You can substitute all occurence of HI with
$(eval HELLO=Hello).  Your makefile is equivalent to:


---------Begin Makefile------------


all:server client

server:
    @echo "HELLO: $(HELLO)"
    @echo "HI: $(eval HELLO=Hello)"

client:
    @echo "HELLO: $(HELLO)"
    @echo "HI: $(eval HELLO=Hello)"
-----------End Makefile------------

So you see, there's no variable named HELLO defined before you execute
one of the echo HI lines.


In info gmake, you should be able to read about := which may do what you want.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.


reply via email to

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