Here is another, trickier example. It shows how to generate two
programs (ctags
and etags
) from the same source file
(`etags.c'). The difficult part is that each compilation of
`etags.c' requires different cpp
flags.
bin_PROGRAMS = etags ctags ctags_SOURCES = ctags_LDADD = ctags.o etags.o: etags.c $(COMPILE) -DETAGS_REGEXPS -c etags.c ctags.o: etags.c $(COMPILE) -DCTAGS -o ctags.o -c etags.c
Note that ctags_SOURCES
is defined to be empty--that way no
implicit value is substituted. The implicit value, however, is used to
generate etags
from `etags.o'.
ctags_LDADD
is used to get `ctags.o' into the link line.
ctags_DEPENDENCIES
is generated by Automake.
The above rules won't work if your compiler doesn't accept both
`-c' and `-o'. The simplest fix for this is to introduce a
bogus dependency (to avoid problems with a parallel make
):
etags.o: etags.c ctags.o $(COMPILE) -DETAGS_REGEXPS -c etags.c ctags.o: etags.c $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o
Also, these explicit rules do not work if the de-ANSI-fication feature is used; supporting that requires a little more work:
etags._o: etags._c ctags.o $(COMPILE) -DETAGS_REGEXPS -c etags.c ctags._o: etags._c $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o
Go to the first, previous, next, last section, table of contents.