tech-toolchain archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
make(1) variable expansion inconsistency
Quite some time back, I wrote about problems building some software
because make(1) was overriding Makefile-set variables with
command-line-set variables only sometimes.
This is all on 4.0.1.
I believe I know when the "sometimes" is. Consider this Makefile:
V = makefile
foo: xyz-${V}
F:= xyz-${V}
bar: ${F}
xyz-cmd: .PHONY
echo building xyz-cmd
xyz-makefile: .PHONY
echo building xyz-makefile
Now, consider "make V=cmd foo" and "make V=cmd bar". They should be
identical, right?
Nope.
% make V=cmd foo
echo building xyz-cmd
building xyz-cmd
% make V=cmd bar
echo building xyz-makefile
building xyz-makefile
%
It appears that variable expansion on dependency lines allows
command-line settings to override Makefile settings, but that variable
expansion when doing a var:=value setting doesn't.
Interestingly, 1.4T's make exhibits the same (mis?)behaviour on the
above test, though the build procedure that got me into this mess works
fine there - apparently something changed in /usr/share/mk between
versions (the build in question uses <bsd.lib.mk>) and exposed this.
A quick look at make's source doesn't make (ha) it obvious how to fix
this. I'm going to be digging more, but if someone who knows make
better than I do would care to point me in the right direction (or,
better yet, fix it) that would be much appreciated.
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse%rodents-montreal.org@localhost
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B
Home |
Main Index |
Thread Index |
Old Index