bug-make
[Top][All Lists]
Advanced

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

RE: conditionals not working for conditional variables in sub-make?


From: Martin Dorey
Subject: RE: conditionals not working for conditional variables in sub-make?
Date: Thu, 7 May 2009 15:05:29 -0700

(Re-adding list.)

 

> First run

> Second run

 

Make is run three times, once by the human, twice by the makefile.  I'm not sure what you mean with this numbering.  I think you mean the first and second runs of the echo command in the do-echo rule but please correct me if I'm wrong.

 

> These can clearly be seen in your output.

 

I'll reproduce the two lines of echo output here for clarity:

 

VAR=foo VAR2=bar VAR3=foo

VAR=bar VAR2=bar VAR3=bar

 

> if in the first run VAR3 can pick up the value "foo", indicating

> that VAR is also "foo"

 

In the first line that I quote above, which is produced by a child of the second make invocation - the one tasked with building var1 - VAR3 is evaluated during the invocation of the do-echo rule as a prerequisite of the var1 rule.  Per:

 

>>   There is one more special feature of target-specific variables: when

>> you define a target-specific variable that variable value is also in

>> effect for all prerequisites of this target

 

This means that var1's target-specific assignment of foo to VAR is in effect.

 

VAR3 is defined using deferred evaluation - "=" rather than ":=" - so the right-hand side of the assignment is deferred to evaluation-time.  At evaluation time, as we've seen, the right-hand side - "$(VAR)" - is "foo".

 

> why does the statement ifeq($(VAR),foo) fail?

 

That statement is evaluated during an earlier phase of make's execution.  It's not reevaluated for every target.  At the time, and in the scope, when it was evaluated, $(VAR) was unset, hence empty.

 

-----Original Message-----
From: Szekeres István [mailto:address@hidden]
Sent
: Thursday, May 07, 2009 14:50
To: Martin Dorey
Subject: Re: conditionals not working for conditional variables in sub-make?

 

2009/5/7 Martin Dorey <address@hidden>:

>> VAR become foo when the "var1" rule was executed.

>> it reevaluates because of the explicit "make" commands in the "all" rule.

> 

> Think about the order in which those two things happen.

> 

> The second one happens before the first and hence doesn't see the first's effect.

> 

> A thought experiment might help you to see the light.  Imagine in the "all" rule, that instead of running "make var1", you ran "a-script-which-happens-to-invoke-make-var1".

 

Sorry I am still not convinced.

 

First run: VAR=foo, VAR3 picks up the value of VAR, becoming also foo, correct.

Second run: VAR=bar, VAR3 picks up the value of VAR, becoming also bar, correct.

 

Can we agree that these two statements are OK? These can clearly be

seen in your output.

 

BUT: if in the first run VAR3 can pick up the value "foo", indicating

that VAR is also "foo", then why does the statement ifeq($(VAR),foo)

fail???


reply via email to

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