On Sat, Mar 19, 2016 at 7:22 AM, Paul Smith <psm...@gnu.org> wrote: > On Tue, 2016-03-15 at 10:29 +0800, 一瓶水 wrote: > > I saw GNU make (I am using 3.8.1) allows the usage of 'make VAR+=VAL' > > command line, but it does not append VAL to VAR and instead it > > overrides VAR to VAL. > > > > > > Is this expected behavior? I did not find any doc explaining the usage > > of VAR+=VAL on command line. > > It is expected behavior. Variables on the command line have a higher > priority than variables set inside makefiles, and command line variables > are set first when the command line is parsed. So, by the time the > makefile is read in and another variable assignment is seen, that will > have a lower priority and it will be ignored. >
I feel that, however correct, there's still something unsatisfying in this answer because the behavior is counterintuitive. It's clear what a person wants and expects when they use += on the command line but they (silently) don't get that. Consider these sequences: Using += in makefile with = on command line: % echo -e 'override FOO += bar\n$(info FOO=$(FOO))\nall:;@:' | make -f - FOO=foo FOO=foo bar Using += in makefile with += on command line: % echo -e 'override FOO += bar\n$(info FOO=$(FOO))\nall:;@:' | make -f - FOO+=foo FOO=foo bar The above two give the identical result. Same for this set with a = in the makefile: % echo -e 'override FOO = bar\n$(info FOO=$(FOO))\nall:;@:' | make -f - FOO=foo FOO=bar % echo -e 'override FOO = bar\n$(info FOO=$(FOO))\nall:;@:' | make -f - FOO+=foo FOO=bar So in what scenario would += on the command line make sense? I'd propose that it either be "fixed" to do what people expect or to give an error. Or at the very least this anti-intuitive behavior should be called out specially in the documentation (I don't recall any such and didn't find it in a quick scan). David Boyce _______________________________________________ Help-make mailing list Help-make@gnu.org https://lists.gnu.org/mailman/listinfo/help-make