🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Steven Grady Mon, 25 Sep 1989 22:22
overriding productions in make
#441
Author: Steven Grady
Date: Mon, 25 Sep 1989 22:22
55 lines
2660 bytes
The make document says that it's illegal to have different commands
for the same target.  If you want to include a standard makefile,
but you want to override a particular production, you have to use the
".DEFAULT" mechanism.  Well, I set up some makefiles that used this
mechanism.  I didn't need to test it until today.  I suddenly discovered
that it has problems.  For instance:
    Makefile:
	foo:
	    @echo moose
	.DEFAULT:
	@$(MAKE) -f GenericMakefile $@

    GenericMakefile:
	foo:
	    @echo foo
	
	bar: foo
	    @echo bar
	
Now suppose I say "make foo".  OK, fine, the default rule is not
invoked.  But if I say "make bar", there is no rule to make bar in
"Makefile", so it invokes the default rule, which not only gets the
standard production for bar, but (since it's a new invocation) gets the
standard production for foo as well.  (Also, of course, assuming the
majority of makefiles don't have special cases, make must be invoked an
extra time for every production, which is a problem, since make isn't
all that fast to begin with.)  To get the correct behavior out of the
above set of makefiles, it would be necessary to include all the
productions that depend on the special target in the new makefile.

How bad would it be to support an alternate semantics for multiply-
defined targets?  Specifically, instead of them being illegal, have 
the first (or last) one take precedence.  This would allow the above 
Makefile to be simply:
    foo:
	@echo moose

    include GenericMakefile

The make would execute more quickly (since it wouldn't need to re-exec
itself), and it would work correctly for the above case.  Also, other
problems could be avoided -- eg, under the current scheme, saying "make
-p" will print out the rules defined in "Makefile", not
"GenericMakefile", which makes it harder to debug the generic case.

I realize this change would diverge from the exact compatibility with 
standard makes, but it's already divergent (for instance, it passes all
variables into the environment), and this would be a useful feature.

	Steven
	...!ucbvax!grady
	grady@postgres.berkeley.edu

If God had wanted us to be concerned for the plight of the toads, he would
have made them cute and furry. 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads