On Wed, Mar 6, 2013 at 12:05 PM, Hiebert, Darren (IS)
<[email protected]> wrote:
> Attached (and below) is a slight variation of my original makefile that 
> incorporates your recommendation, but no longer works for any of the 
> SAMPLE_BINn_OBJECT_FILES (where n is 1, 2, or 3). It replaces the three 
> different expansions with one foreach.

When using $(eval), variable expansion takes place twice: once when
the argument to $(eval) is expanded, and then again when the result of
that is processed by $(eval).  Variable assignments are done during
the *second* of those.  So, anything that depends on the expansion of
a variable to an assignment in the text being evaluated, such as your
use of $($(1)_TARGET_NUMBERS), must be delayed to the second
expansion.

Here, the $(foreach) needs to see the expanded value, so that it can
split it on whitespace, so it and all the expansions in it except for
$(1) have to be delayed too.  That gives you this:

$$(foreach index,$$($(1)_TARGET_NUMBERS),$$(call
target_assignments,$(1),BIN$$(index)))

...but at that point, the $(call target_assignments) is then only
being expanded once instead of twice like it currently expects.  So,
you need to wrap *that* in an $(eval):

$$(foreach index,$$($(1)_TARGET_NUMBERS),$$(eval $$(call
target_assignments,$(1),BIN$$(index))))


There's probably a better way to fix this by fixing
target_assignments, but the utter lack of comments make me unsure of
how this is being used elsewhere or its intent.


Philip Guenther

_______________________________________________
Help-make mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-make

Reply via email to