Probleme beim Ausführen meiner Makefile

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
LukasDebian
Beiträge: 68
Registriert: 03.03.2010 19:12:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Augsburg
Kontaktdaten:

Probleme beim Ausführen meiner Makefile

Beitrag von LukasDebian » 10.10.2010 19:06:01

hi,

bin gerade dabei mir eine makefile zu schreiben. die makefile soll aus einer c-datei eine hex-datei machen, sodass ich sie auf mein microcontroller übertragen kann. wenn ich die makefile ausführe, werden jedoch nur die ersten 2 befehle ausgeführt.

hier mal die makefile:

Code: Alles auswählen

c-datei:		neu.c
			avr-gcc -O2 -mmcu=atmega32 neu.c -o neu.elf
			avr-gcc -O2 -c -mmcu=atmega32 neu.c -o neu.o
		
o-datei:		neu.o
			avr-gcc -mmcu=atmega32 neu.o -o neu_all.elf			
			
elf-datei:		neu_all.elf
			avr-objcopy -O ihex -j .text -j .data neu_all.elf  neu_hex_all.hex					
es wird also nur

Code: Alles auswählen

avr-gcc -O2 -mmcu=atmega32 neu.c -o neu.elf
avr-gcc -O2 -c -mmcu=atmega32 neu.c -o neu.o
ausgeführt und mehr nicht.

ich hab noch nicht gerade viele makefiles geschrieben. ist in meiner makefile irgendein fehler drinnen?

bitte um hilfe

danke

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: Probleme beim Ausführen meiner Makefile

Beitrag von gms » 10.10.2010 19:24:39

das erste Target aus dem Makefile ist immer auch das Default-Target ( In deinem Beispiel ist das eben 'c-datei' ).

Du verwendest auch viele unnötige Pseudo-Targets. Das wäre zwar alleine noch kein Problem, jedoch können bei dir die Abhängigkeiten nicht richtig aufgelöst werden
z.B 'elf-datei' ist zwar korrekter Weise von 'neu_all.elf' abhängig, jedoch gibt es kein Target für 'neu_all.elf', sodaß make auch nicht wissen kann, wie 'neu_all.elf' gebaut werden muß, wenn es für 'elf-datei' benötigt wird

Ich habe da einmal kleinere Änderungen vorgenommen:

Code: Alles auswählen

all:		neu_hex_all.hex

neu.elf:		neu.c
			avr-gcc -O2 -mmcu=atmega32 neu.c -o neu.elf
		
neu.o:
			avr-gcc -O2 -c -mmcu=atmega32 neu.c -o neu.o
		
neu_all.elf:		neu.o
			avr-gcc -mmcu=atmega32 neu.o -o neu_all.elf			
			
neu_hex_all.hex:	neu_all.elf
			avr-objcopy -O ihex -j .text -j .data neu_all.elf  neu_hex_all.hex					
Gruß
gms

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: Probleme beim Ausführen meiner Makefile

Beitrag von bmario » 10.10.2010 19:35:47

dir fehlen einfach die Abhängigkeiten zwischen den Targets.

So sieht das z.B. für ein einfaches C Programm aus:

Code: Alles auswählen

all: hello
hello: main.o list.o
    gcc -o hello main.o list.o
main.o: main.c list.h
    gcc -c main.c
list.o: list.h
    gcc -c list.c

clean:
    rm *.o hello
Man macht also immer folgendes Schema:

Code: Alles auswählen

Targetname: {Liste der Dateien und anderen Targets von dem dieser Target abhängig ist}
    {Liste der Befehle die für dieses Target ausgeführt werden soll}
Am besten nennt man ein Target immer so, wie die Datei, die mit ihm erstellt werden soll. Dann ergibt sich der Rest von selbst.
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

Antworten