This Makefile:

-------------------------
%.o: %.c
        gcc -c $< -o $@

foo.o: foo.c
        echo "stem is $*"
-------------------------

results in "make foo.o" producing the output "stem is foo". The same is
true if I omit the first two lines, but not if I run "make -r foo.o"
with just the second rule.

This seems like a bug to me: the correct output is "stem is ".

Note that GCC relies on this behavior:

https://forge.sourceware.org/gcc/gcc/src/commit/c8545a3143330983e51d913f0a01187258b14510/libgcc/static-object.mk#L30

points to this code:

----------------------------
$(base)$(objext): $o $(base).vis
        $(gcc_compile) -c $(as_flags-$<) -include $*.vis $<
----------------------------

This means GCC cannot currently be built with "make -r" on some
machines. It doesn't actually use the built-in rules, it only relies on
them to determine what the stem would be according to the rule if it
were to be used.

This seems like a GCC bug to me.

My apologies if this has been reported before; a brief search didn't
produce any relevant results, the make documentation doesn't mention
this behavior, and the make source code looks like this was originally
an accident.

If this isn't a bug, or a bug we cannot fix at this point because too
much code out there might rely on it, maybe the documentation could
mention it.

Pip


Reply via email to