Path: utzoo!utgpu!news-server.csri.toronto.edu!rutgers!cs.utexas.edu!romp!auschs!awdprime!doorstop.austin.ibm.com!tif From: tif@doorstop.austin.ibm.com (Paul Chamberlain) Newsgroups: comp.unix.shell Subject: Re: make(1) questions Message-ID: <5612@awdprime.UUCP> Date: 26 Feb 91 15:07:08 GMT References: <44683@ut-emx.uucp> <1991Feb26.030248.16384@virtech.uucp> Sender: news@awdprime.UUCP Reply-To: tif@doorstop.austin.ibm.com (Paul Chamberlain) Distribution: usa Organization: IBM AWD, Austin Lines: 52 cpcahil@virtech.uucp (Conor P. Cahill) writes: >pefv700@perv.pe.utexas.edu writes: >>I have 2 executables that are "made" using the same sources files. The only >>difference is that for one a cpp(1) macro is defined, for the other it is not. >The easiest way to do this is to create a new rule: That's alot better than my way. But just to give an alternative method: Well, I got it figured out. Below I have included a makefile for two hypothetical executables that use the same .c's. A fringe benefit is that even if you only have one executable, using this style of make file will allow you to remove all the .o's and it still won't recompile anything unless a .c or .h changed. Paul Chamberlain | I do NOT speak for IBM. IBM VNET: PAULCC AT AUSTIN 512/838-9662 | ...!cs.utexas.edu!ibmchs!auschs!doorstop.austin.ibm.com!tif # This is a really bizarre makefile that allows two executables to be made # from one set of source. In this example, the exe's are to be compiled # with slightly different compile lines and libraries. This should handle # all manner of interrupted and restarted compiles. OBJ = obj1.o obj2.o obj3.o HFILES = local1.h local2.h CFLAGS = -O $(NAME) LDFLAGS = $(OTHER_LIB) # by default, make both executables all: exe1 exe2 clean: rm -f *.o making.exe1 making.exe2 # This will prevent recompilation if everything is # up to date even if no .o's are around. exe1: $(OBJ:.o=.c) exe1.c $(HFILES) if test ! -f making.exe1;then make clean;fi touch making.exe1 $(MAKE) NAME=-DEXE1 OTHER_LIB=-lx exe1.make exe1.make: $(OBJ) exe1.o $(CC) $(CFLAGS) $(OBJ) exe1.o $(LDFLAGS) -o exe1 # This will prevent recompilation if everything is # up to date even if no .o's are around. exe2: $(OBJ:.o=.c) exe2.c $(HFILES) if test ! -f making.exe2;then make clean;fi touch making.exe2 $(MAKE) NAME=-DEXE2 exe2.make exe2.make: $(OBJ) exe2.o $(CC) $(CFLAGS) $(OBJ) exe2.o $(LDFLAGS) -o exe2 Brought to you by Super Global Mega Corp .com