EmbeddedRelated.com
Forums
The 2024 Embedded Online Conference

Makefile

Started by martindomke August 22, 2005
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, 




Beginning Microcontrollers with the MSP430


The 2024 Embedded Online Conference