A colleague was working on the problem in parallel and spent time working out the subtleties of eval. I've now been able to get it working using the first approach I showed. Here's the revised code in the top level make file (some lines may wrap):
# Build library dependencies define recur $$(foreach lib_$(1),$$(lib_dep_$(1)),$$(eval $$(call libdep,$$(lib_$(1))))) endef define libdep $$(eval $$(call recur,$(1))) tmplib := tmplib := $$(if $$(findstring $(1),$$(all_dep)),,$(1)) all_dep += $$(tmplib) extra_flags += $$(link_flags_$(1)) endef define prgdep all_dep := $$(foreach lib,$$(prg_dep_$(1)),$$(eval $$(call libdep,$$(lib)))) prg_flg_$(1) := $$(strip $$(sort $$(all_dep:%=-l%) $$(extra_flags))) endef $(foreach prog,$(all_progs),$(eval $(call prgdep,$(prog)))) Then, within the build command for a program, I have something like: $(CC) $(prg_flg_$(call getnotdir,$@)) ...getnotdir just leaves the trailing filename from [EMAIL PROTECTED] When the library make file is included, it sets lib_dep_$(lib); and when the program make file is included, it sets prg_dep_$(prog). Thanks for all the suggestions. I rule that can be gleaned from this (that my colleague suggested) for using eval with define is that any '$' which is not a function argument (such as $(1)) must be preceded by an extra '$'. The above code certainly demonstrates this. Cheers, Greg. -- Greg Kilfoyle <[EMAIL PROTECTED]> _______________________________________________ Help-make mailing list [EMAIL PROTECTED] http://lists.gnu.org/mailman/listinfo/help-make
