This makefile example should help clear things up: $ cat makefile SHELL := bash .RECIPEPREFIX := > blah1 := test1 blah2 := test2 export blah2 # blah2 & blah3 should have identical results export blah3 := test3
default: >@$(foreach x,blah1 blah2 blah3 blah4 blah5,echo "${x}: (origin = $(origin ${x}), flavor = $(flavor ${x}), make value = ${${x}}, shell value: $${${x}:-not set})";) $ make --version GNU Make 4.1 (...) $ blah5=test5 make -f makefile blah4=test4 blah1: (origin = file, flavor = simple, make value = test1, shell value: not set) blah2: (origin = file, flavor = simple, make value = test2, shell value: test2) blah3: (origin = file, flavor = simple, make value = test3, shell value: test3) blah4: (origin = command line, flavor = recursive, make value = test4, shell value: test4) blah5: (origin = environment, flavor = recursive, make value = test5, shell value: test5) This is identical to: $ export blah5=test5 $ make -f makefile blah4=test4 blah1: (origin = file, flavor = simple, make value = test1, shell value: not set) blah2: (origin = file, flavor = simple, make value = test2, shell value: test2) blah3: (origin = file, flavor = simple, make value = test3, shell value: test3) blah4: (origin = command line, flavor = recursive, make value = test4, shell value: test4) blah5: (origin = environment, flavor = recursive, make value = test5, shell value: test5) I was a little surprised to discover that variables passed on the command-line to make get marked for export. -brian _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make