I'm trying to write a makefile for my mikrocontroller project. I guess this is not right a gcc-specific question but I don't know where else to ask. As I want to make to versions of the sources, depending on the compilerflags I add, I'm unsure how to deal with the different objectfiles. The following makefile is what I have done till now: # Programme CC = msp430-gcc LD = msp430-ld AR = msp430-ar AS = msp430-gcc GASP = msp430-gasp NM = msp430-nm OBJCPY = msp430-objcopy RANLIB = msp430-ranlib STRIP = msp430-strip SIZE = msp430-size READELF = msp430-readelf CP = cp -p RM = rm -f MV = mv # Settings und Flags MCU = msp430x169 DEBUG =-g OPT =-Os CFLAGS =-mmcu=$(MCU) -Wall $(OPT) $(DEBUG) LDFLAGS =-mmcu=$(MCU) # Targetordner OBJDIR =obj HEXDIR =hex ELFDIR =elf # Pfade MAINPATH = ../Main RBPATH = ../Ringpuffer UPATH = ../USART LCDPATH = ../LCD MUXPATH = ../Multiplexer INCPATH = ../Includes # Sourcen # Main MAINSRC =test.c MAINOBJ =$(MAINSRC:.c=.o) MAINOBJSND =$(MAINOBJ:.o=snd.o) MAINOBJRCV =$(MAINOBJ:.o=rcv.o) SNDELF =$(MAINSRC:.c=snd.elf) SNDHEX =$(MAINSRC:.c=snd.hex) RCVELF =$(MAINSRC:.c=rcv.elf) RCVHEX =$(MAINSRC:.c=rcv.hex) # Ringbuffer RBSRC =ringbuffer.c RBOBJ =$(RBSRC:.c=.o) RBOBJSND =$(RBOJBS:.o=snd.o) RBOBJRCV =$(RBOJBS:.o=rcv.o) # USART USRC =usart.c UOBJ =$(USRC:.c=.o) UOBJSND =$(UOBJS:.o=snd.o) UOBJRCV =$(UOBJS:.o=rcv.o) # LCD LCDSRC =lcd.c LCDOBJ =$(LCDSRC:.c=.o) LCDOBJSND =$(LCDOBJ:.o=snd.o) LCDOBJRCV =$(LCDOBJ:.o=rcv.o) #Multiplex MUXSRC =Multiplex.c MUXOBJ =$(MUXSRC:.c=.o) MUXOBJSND =$(MUXOBJ:.o=snd.o) MUXOBJRCV =$(MUXOBJ:.o=rcv.o) # Objects SNDOBJS =$(RBOBJSND) $(UOBJSND) $(MAINOBJSND) RCVOBJS =$(RBOBJRCV) $(UOBJRCV) $(MAINOBJRCV) #$(UOBJ) $(LCDOBJ) $(MUXOBJ) .PHONY : clean all all: receiver sender receiver: $(RCVHEX) sender : $(SNDHEX) clean: $(RM) $(addprefix $(OBJDIR)/,$(SNDOBJS)) $(RM) $(addprefix $(OBJDIR)/,$(RCVOBJS)) $(RM) $(addprefix $(ELFDIR)/,$(SNDELF)) $(RM) $(addprefix $(ELFDIR)/,$(RCVELF)) $(RM) $(addprefix $(HEXDIR)/,$(SNDHEX)) $(RM) $(addprefix $(HEXDIR)/,$(RCVHEX)) # Regeln fuer die Objectfiles # Sender $(RBOBJSND) : $(addprefix $(RBPATH)/,$(RBSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D SENDER $< -o $(OBJDIR)/$@ $(UOBJSND) : $(addprefix $(UPATH)/,$(USRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D SENDER $< -o $(OBJDIR)/$@ $(LCDOBJSND) : $(addprefix $(LCDPATH)/,$(LCDSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D SENDER $< -o $(OBJDIR)/$@ $(MUXOBJSND) : $(addprefix $(MUXPATH)/,$(MUXSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D SENDER $< -o $(OBJDIR)/$@ $(MAINOBJSND) : $(addprefix $(MAINPATH)/,$(MAINSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D SENDER $< -o $(OBJDIR)/$@ # Receiver $(RBOBJRCV) : $(addprefix $(RBPATH)/,$(RBSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D RECEIVER $< -o $(OBJDIR)/$@ $(UOBJRCV) : $(addprefix $(UPATH)/,$(USRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D RECEIVER $< -o $(OBJDIR)/$@ $(LCDOBJRCV) : $(addprefix $(LCDPATH)/,$(LCDSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D RECEIVER $< -o $(OBJDIR)/$@ $(MUXOBJRCV) : $(addprefix $(MUXPATH)/,$(MUXSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D RECEIVER $< -o $(OBJDIR)/$@ $(MAINOBJRCV) : $(addprefix $(MAINPATH)/,$(MAINSRC)) $(CC) -c $(CFLAGS) -I$(INCPATH) -D RECEIVER $< -o $(OBJDIR)/$@ # Erstelle .elf-File # Sender $(SNDELF) : $(SNDOBJS) $(CC) $(LDFLAGS) $(addprefix $(OBJDIR)/,$(SNDOBJS)) -o $(ELFDIR)/$@ # Receiver $(RCVELF) : $(RCVOBJS) $(CC) $(LDFLAGS) $(addprefix $(OBJDIR)/,$(RCVOBJS)) -o $(ELFDIR)/$@ # Erstelle .hex-File # Sender $(SNDHEX) : $(SNDELF) $(OBJCPY) -O ihex $(ELFDIR)/$< $(HEXDIR)/$@ # Receiver $(RCVHEX) : $(RCVELF) $(OBJCPY) -O ihex $(ELFDIR)/$< $(HEXDIR)/$@ Only the objects for the MAINOBJRCV are compiled and than the linker says that he has problems to resolve the references, obviously because the other objectfiles have not been made yet. Has anyone a hint what I did wrong. Thanks in advance,
Makefile
Started by ●August 22, 2005