[En-Nut-Discussion] Can't correctly build NutOS 4.8.9 on Fedora 14 for Ethernut 2.1b
Bernard Fouché
bernard.fouche at kuantic.com
Tue Apr 19 12:27:01 CEST 2011
Hi Harald.
I found the problem in nut/Makerules.avr-gcc. Instead of having:
%o: %c
$(CC) ...etc..
one needs:
%.o: %.c
$(CC) ...etc...
(a dot after each '%')
Changing this I can recompile everything!
My make(1) version is GNU Make 3.82.
The problem is that the built-in rule '%.o' in the compiler has
precedence over the '%o' rule defined in the Makefile. More exactly,
with the original Makerules.avr-gcc, make(1) faces two rules to build an
objet file. Since the stem is shorter with the built-in rule '%.o'
compared with rule '%o', then make(1) activates the '%.o' rule. This is
documented here:
http://www.gnu.org/software/make/manual/make.html#Pattern-Match
One can confirm this with:
%.o: %.c
%o : %c
$(CC) ...etc...
In that case the built-in rule '%.o' is removed from make(1) before
considering the new one: it works since only '%o' remains, there is no
competition between rules and the length of the stem is not considered.
It is also possible to run make(1) with the '-r' option to remove
built-in rules and it also works while it allows to keep
Makefiles.avr-gcc as is.
Other possibilities:
- force built-in rules removal by having for instance:
Makerules-nobuiltin:
%.o: %.c
%.o: %.cc
etc.
And then in Makerules.avr-gcc (and for other targets):
include $(top_srcdir)/Makerules-nobuiltin
This way you dont depend in the '-r' option is ever different versions
of make are used on Windows, Linux, MacOS, etc.
Bernard
More information about the En-Nut-Discussion
mailing list