Makefile

Apr. 25th, 2012 09:28 pm
metaclass: (Default)
[personal profile] metaclass
Это, а как правильно makefile делать? А то что-то руками писать зависимости быстро начинает надоедать.

Date: 2012-04-25 07:47 pm (UTC)
From: [identity profile] nicka-startcev.livejournal.com
вот первый попавшийся.
Компиляция под х86 сломана, но леххко чинится по аналогии (делаем эльф)

TARGET		 = atmega328
CC 		 = avr-g++
LD 		 = avr-gcc
RM		 = rm
AR		 = ar 
MKDIR		 = mkdir
OPTIMIZE         = -Os 
PORT		 = /dev/ttyUSB0
CFLAGS  	 = -g -Wall -W $(OPTIMIZE) -mmcu=$(TARGET) -Iinclude -Iinc
CFLAGS		+= -DF_CPU=16000000UL -D__AVR_ATmega328__ -c
LDFLAGS		 = -g -Wl,-Map,$(OUT)$(BINNAME).map -mmcu=$(TARGET) -lm
OBJCOPY		 = avr-objcopy
OBJDUMP		 = avr-objdump
#DUDE		 = avrdude.exe -B 2.0 -p m8 -c avrispv2 -P com1
DUDE		 = avrdude -patmega328p -carduino -P$(PORT) -b57600 -D

x86_CC     = g++
x86_LD 	   = g++
x86_CFLAGS = -g -Wall -W $(OPTIMIZE) -Iinclude -c

LIBS	= 
OUT	= out/
SRC	= src/
SRC2	= src-lib/
O 	= .o
O86 	= .obj
E 	= .elf
HEX	= .hex
BIN	= .bin
SREC	= .srec
x86	= .exe
BINNAME	= test

vpath %.cpp $(SRC)
vpath %.c $(SRC)
vpath %.cpp $(SRC2)
vpath %.c $(SRC2)
vpath %.$(E) $(OUT)

OBJS = $(subst $(SRC),$(OUT), $(subst .C,$(O), $(subst .c,$(O), $(subst .cpp,$(O), $(wildcard $(SRC)*.cpp $(SRC)*.c $(SRC)*.C)))))
OBJS += $(subst $(SRC2),$(OUT), $(subst .C,$(O), $(subst .c,$(O), $(subst .cpp,$(O), $(wildcard $(SRC2)*.cpp $(SRC2)*.c $(SRC2)*.C)))))


OBJS_x86 = $(subst $(SRC),$(OUT), $(subst .C,$(O86), $(subst .c,$(O86), $(subst .cpp,$(O86), $(wildcard $(SRC)*.cpp $(SRC)*.c $(SRC)*.C)))))

##########################

all:	$(OUT) $(OUT)$(BINNAME)$(E) $(OUT)$(BINNAME)$(HEX) $(OUT)$(BINNAME)$(BIN) 
all:    $(OUT)$(BINNAME)$(SREC) $(OUT)$(BINNAME).S

debug:  $(OUT) $(OUT)$(BINNAME)$(x86)

clean:
	-rm -rf $(OUT)

prog: all
	$(DUDE) -U flash:w:"$(OUT)$(BINNAME)$(HEX)"

##########################

$(OUT)%$(O): %.cpp
	@echo "[ CC      ]" $<
	@$(CC) $(CFLAGS) -o$@ $<

$(OUT)%$(O): %.c
	@echo "[ CC      ]" $<
	@$(CC) $(CFLAGS) -o$@ $<

$(OUT)%$(HEX): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .text -j .data -O ihex $< $@

$(OUT)%_eeprom$(HEX): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@

$(OUT)%_eeprom$(SREC): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

$(OUT)%_eeprom$(BIN): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@

$(OUT)%$(SREC): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .text -j .data -O srec $< $@

$(OUT)%$(BIN): $(OUT)%.elf
	@echo "[ OBJCOPY ]" $@
	@$(OBJCOPY) -j .text -j .data -O binary $< $@

$(OUT)%.S: $(OUT)%.elf
	@echo "[ OBJDUMP ]" $@
	@$(OBJDUMP) -S $< > $@
	@echo "[ OBJDUMP ]" $@.d
	@$(OBJDUMP) -d $< > $@.d

$(OUT)%$(O86): %.cpp
	@echo "[ x86_CC  ]" $<
	@$(x86_CC) $(x86_CFLAGS) -o$@ $<

$(OUT)%$(O86): %.c
	@echo "[ x86_CC  ]" $<
	@$(x86_CC) $(x86_CFLAGS) -o$@ $<


$(OUT)$(BINNAME)$(E): $(OBJS)
	@echo "[ LD      ]" $@
	@$(LD) $(LDFLAGS) -o $@ $^

$(OUT)$(BINNAME)$(x86): $(OBJS_x86)
	@echo "[ x86_LD  ]" $@
	$(x86_LD) $(x86_LDFLAGS) -o $@ $^

$(OUT):
	@echo "[ MKDIR   ]" $@
	@-$(MKDIR) $@

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 17th, 2025 10:55 pm
Powered by Dreamwidth Studios