The answer to make with multiple executables from same source files

Ken Weaverling weave at brahms.udel.edu
Wed Nov 14 16:20:20 AEST 1990


I didn't respond to original article at first since I usually don't post
but... original article stated:

>I have two executables that depend on the same source files but are
>compiled with different CFLAGS.  Anybody have a good way to make a
>makefile understand this?
>
Then he responds to his own article with...

In article <4223 at awdprime.UUCP> tif at doorstop.austin.ibm.com (Paul Chamberlain) writes:
>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.
>
 <<< Complex makefile deleted >>>
  
Hmm, I am just a humble computer science student, but my Makefile for my
last project did what you said you wanted but is much more straight forward.
However, it *will* recompile missing .o files... It is below. It produces
two binaries, most of the modules are the same except for different compile
flags. Each one has a different main module.


# Makefile for least-cost communications anaylzer
# (project for Univ of Del, CIS 220 class)

CC = g++

#CFLAGS is *normal* flags for compiling program
#DFLAGS is compiled into the driver programs

CFLAGS = -O -g
DFLAGS = -DDEBUG -g

# OBJS is normal objects, DOBJS is debugging objects for driver program

OBJS = symtable.o main.o fileio.o table.o util.o
DOBJS = dsymtable.o dmain.o fileio.o dtable.o dutil.o

all: prog2 dprog2

prog2: $(OBJS)
	$(CC) $(CFLAGS) $(OBJS) -o prog2

dprog2:	$(DOBJS)
	$(CC) $(DFLAGS) $(DOBJS) -o dprog2

symtable.o: symtable.cc symtable.h general.h
	$(CC) $(CFLAGS) -c symtable.cc

table.o: table.cc table.h general.h
	$(CC) $(CFLAGS) -c table.cc

main.o: main.cc general.h symtable.h table.h util.h
	$(CC) $(CFLAGS) -c main.cc

dsymtable.o: symtable.cc symtable.h general.h
	$(CC) $(DFLAGS) -c symtable.cc -o dsymtable.o

dtable.o: table.cc table.h general.h
	$(CC) $(DFLAGS) -c table.cc -o dtable.o

dmain.o: driver.cc driver.h general.h
	$(CC) $(DFLAGS) -c driver.cc -o dmain.o

fileio.o: fileio.cc fileio.h general.h
	$(CC) $(CFLAGS) -c fileio.cc

util.o: util.cc util.h general.h fileio.h
	$(CC) $(CFLAGS) -c util.cc

dutil.o: util.cc util.h general.h fileio.h
	$(CC) $(DFLAGS) -c util.cc -o dutil.o

clean:
	rm -rf $(DOBJS) $(OBJS) prog2 dprog2 *~ core

strip:
	strip prog2 dprog2
	chmod 711 prog2 dprog2 .
	rm -rf $(OBJS) *~ core
-- 

Ken Weaverling (insert any job title here, except for official spokesperson)
Delaware Technical & Community College --- weave at brahms.udel.edu



More information about the Comp.unix.programmer mailing list