Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!cornell!uw-beaver!rice!sun-spots-request From: Kemp@dockmaster.ncsc.mil Newsgroups: comp.sys.sun Subject: Using make to compile for sun3 and sun4 Keywords: SunOS Message-ID: <4226@kalliope.rice.edu> Date: 27 Jun 89 15:22:00 GMT Sender: usenet@rice.edu Organization: Sun-Spots Lines: 60 Approved: Sun-Spots@rice.edu X-Sun-Spots-Digest: Volume 8, Issue 60, message 4 of 7 After watching the "make wars" on info-unix between GNU make and AT&T toolchest make, I am convinced that we Sun users have a pretty good product that has lots of good features that were added without breaking compatibility or introducing lots of bugs. That said, there is one thing I haven't been able to figure out from the examples in the manual. I want to do the equivalent of: if(sun3) CFLAGS = -f68881 else CFLAGS = (nothing) A conditional macro seems to be the way to do it, but the syntax is target-list := macro = value i.e. the assignment is conditioned on the target, not on the value of another macro (TARGET_ARCH). There is probably a gross solution like defining identical targets PROGRAM.sun3 and PROGRAM.sun4, but an elegant solution would be better. I finally gave up and used a pattern replacement hack. Here is the Makefile: -------------- SOURCES= prog.c sub.c ULIBS= ../lib/$(ARCH)/lib.a PROGRAM= prog CFLAGS= -O3 $(TARGET_ARCH:-sun3=-f68881) <<< Gross Hack!!! OBJECTS= $(SOURCES:.c=.o) ARCH= $(TARGET_ARCH:-%=%) all debug profile: $(PROGRAM) debug := CFLAGS= -g <<< This is where it should profile := CFLAGS= -pg -O3 <<< really be done $(PROGRAM): $(OBJECTS) $(LINK.c) -o $@ $(OBJECTS) $(ULIBS) --------------- This works for a sun3, (when not doing a make debug or profile), but on a sun4 it gives an ugly but apparently harmless duplicate flag: cc -O3 -sun4 -sun4 -c prog.c It would not work in the general case of more than two alternatives (like if I gave a hoot about -sun386i) or if the macro must have different values for each alternative (i.e. the unmodified value -sun4 is not acceptable). Surely this is an extremely common situation; I'm surprised that Sun's otherwise good make manual has absolutely no examples of variants depending on TARGET_ARCH. If you have a concise, sophisticated solution, please mail it to me; I will summarize for the group. Dave Kemp