Archiv verlassen und diese Seite im Standarddesign anzeigen : makefile -> Verzeichnis für generierte Dateien
Hallo,
weiß jemand wie man im makefile ein Verzeichnis definieren kann wo die *.o und *.lst Dateien abgelegt werden können ?
Es ist irgendwie unübersichtlich, wenn die generierten Files immer in dem gleichen Verzeichnis liegen wie die *.c und *.h Files.
viele Grüße
camrob
hallo!
kann da wirklich keiner einen tipp zu abgeben?? ich fänd das nämlich auch grade unwahrscheinlich spannend zu wissen..
mein begrenztest verständis von make treibt mich grade in den wahnsinn...
SprinterSB
20.11.2006, 13:20
Eigentlich macht man das genau andersrum:
Das Makefile steht in dem Verzeichnis, in das erzeugt werden soll und die Quellen woanders (zB eine Ebene höher).
# The project's base name
PRG = eBook
# C sources that make up the project
SRC = main.c ...
# we run on an AVR ATmega8
MCU_TARGET = atmega8
OPTIMIZE = -Os
INCLUDES = -I../include
DEFS = -DF_CPU=8000000
CC = avr-gcc -mmcu=$(MCU_TARGET)
LD = $(CC)
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
# Targets dealing with C sources
.PHONY: all size lst text eeprom depend
# clean targets
.PHONY: clean
CFLAGS = -Wall $(OPTIMIZE) $(DEFS) $(INCLUDES) -Winline -fno-keep-inline-functions -fno-common
LDFLAGS = -Wl,-Map,$(PRG).map -Wl,-section-start=.eeprom=0x810001
ASMFLAGS = -dp -save-temps -fverbose-asm
# object and assembler files. we build *.o out of *.s (not *.c)
OBJ = $(patsubst %.c, %.o, $(SRC))
ASM = $(patsubst %.c, %.s, $(SRC))
all: depend $(ASM) $(PRG).elf lst text eeprom
depend:
$(CC) -MM $(addprefix ../, $(SRC)) -mmcu=$(MCU_TARGET) $(DEFS) $(INCLUDES) |\
sed -e 's/\.o:/.s:/' > .depend
size:
avr-size -x $(OBJ)
@echo AVR $(MCU_TARGET) Memory Usage:
@avr-size -C --mcu=$(MCU_TARGET) $(PRG).elf | grep -E '^(Data)|(Pro)'
$(PRG).elf: $(OBJ)
$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
-include .depend
%.s: ../%.c Makefile
$(CC) -S $< -o $@ $(ASMFLAGS) $(CFLAGS)
%.o: %.s
$(CC) -x assembler $< -c -o $@
# Rules to clean up
clean:
rm -f .depend $(wildcard *.o *.s *.i *.map *.lst *.elf *.hex *.map *~ ../*~)
# Rules to generate disassembly
lst: $(PRG).lst
%.lst: %.elf
$(OBJDUMP) -h -S -j .data -j .eeprom -j .text $< > $@
# Rules for building the .text rom images
text: $(PRG).hex
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
# Rules for building the .eeprom rom images
eeprom: $(PRG)_eeprom.hex
%_eeprom.hex: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=1 -O ihex $< $@
# Rules with avrdude
reset:
$(AVRDUDE)
burn:
$(AVRDUDE) -V -U flash:w:"$(PRG).hex"
burn-all:
$(AVRDUDE) -V -U flash:w:"$(PRG).hex" -U eeprom:w:"$(PRG)_eeprom.hex"
ah... cool...
danke, das muss ich erstmal in ruhe auseinanderbauen ;)
ich war nur auf die idee gekommen, weil die heises das bei dem ct-bot projekt so hinbekommen haben, aber das ist wohl eher eine feature der entwicklungsumgebung (eclipse) als eine errungeschaft des makefiles, wie?
irgendwie stolpert man immer von einer sprache zur nächsten... :)
aber das ist wohl eher eine feature der entwicklungsumgebung (eclipse) als eine errungeschaft des makefiles, wie?
Quatsch,
was hat das mit eclipse oder mit make zu tun ?
Wenn Du unbedingt sowas haben mußt, leg Du in Deinem Projektverzeichnis einen Ordner und schreib Dir im Makefile am Schluß von all:
mv *.lst *.lss *.map deinordner
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.