Assembler Makefile

Westbär

Mitglied
Hallo,
Ich habe einige Dateien in Assembler Sprache geschrieben. Nun will ich sie compilieren, allerdings will ich nicht jedes über das Terminal.
Nun, könnt ihr mir bitte helfen ein Makefile für diese Assembler Files zuschreiben?


Gruß
 
Zuletzt bearbeitet:
Hi.

Zuerst müsstest du uns erklären wie diese Dateien zusammenhängen - welche Zieldateien es gibt und aus welchen Quelldateien die zusammengesetzt werden.

Gruß
 
Ich weiß nicht genau was du meinst....
Ich habe nur ein paar Assembler files die nicht mehr machen als Texte ausgeben. Die möchte ich jetz über ein Makefile kompilieren. Rein zum testen und zum lernen.
Benutzen tu' ich .asm Files und "nasm".

(Es hängt keins mit einem anderen zusammen)


Gruß
 
Zuletzt bearbeitet:
Ich weiß nicht genau was du meinst....
Ich meine: du hast einige Assembler-Dateinen - super. Wie hängen die Assemblerdateien denn nun zusammen? Werden die alle in ein Programm kompiliert, oder werden die alle in einzelne Programme kompiliert, oder werden Datei 1, 2 und 3 in ein Programm 3, 4 in ein zweites kompiliert, ... kurz: wie hängen die Dateien zusammen? Welche Datei hängt von welcher ab - also wann muß eine Datei neu kompiliert werden weil sich die andere Datei geändert hat?

Code:
.PHONY = all

SOURCES = $(wildcard *.asm)
TARGETS = $(SOURCES:.asm=)

% :: %.asm
	nasm -f elf -o $@ $<


all: $(TARGETS)
Das Makefile kompiliert alle .asm Dateien im aktuellen Verzeichnis in eigene ELF Dateien.

Gruß
 
Zuletzt bearbeitet:
Keine Datei hängt von keiner anderen Datei ab. Die sind alle unterschiedlich und sollen aber dann im Binär zusammengefügt zu einem executable werden.

Die Dateien liegen auch in Unterverzeichnissen, mir wäre es also recht, wenn man manuell angibt, welche dateien genommen werden.


Gruß
 
Man, lass dir doch nicht alles aus der Nase ziehen. Ein Makefile Beispiel hab ich dir schon geliefert. Du darfst auch ruhig etwas Eigeninitiative zeigen :)rtfm: 'info make').

Es gibt immer irgendwelche Abhängigkeiten, sonst bräuchte man auch kein Makefile schreiben. Zumindest hängt die Zieldatei von den Quelldateien ab und muß neu erstellt werden wenn eine der Quelldateien geändert wurde.

Welche Dateien werden denn nun wie erstellt? Ich nehme mal an du erstellst aus den Assemblerdateien erstmal ELF Objektdateien? Oder wie? Wie rufst du NASM auf? Und dann linkst du die Objektdateien dann zu einem Programm zusammen? Oder nicht? Welche Schritte machst du denn, bis zum fertigen Programm?

Code:
.PHONY = all

SOURCES = subdir1/d1.asm subdir2/d2.asm subdir3/d3.asm
OBJECTS = $(SOURCES:.asm=.o)
TARGETS = prog

%.o : %.asm
	nasm -f elf -o $@ $<


all: $(TARGETS)

prog: $(OBJECTS)
	ld -o $@ $^
Gruß
 
Ich kompiliere die Assembler Files so:
Code:
nasm –f bin –o datei.bin datei.asm

Ich hab nun das Makefile ein bisschen umgeändert auf die hoffung das es funktioniert.

Code:
.PHONY = all

SOURCES = dat1/datei.asm dat3/dhost.asm
OBJECTS = $(SOURCES:.asm=.bin)
TARGETS = prog

%.bin : %.asm
	nasm -f bin -o $@ $<


all: $(TARGETS)

prog: $(OBJECTS)
	ld -o $@ $^

Leider bekomme ich immer den Error:
nicolas@localhost ~/Desktop/assembler/ $ make
ld -o prog dat1/datei.bin dat3/dhost.bin
dat1/datei.bin: file not recognized: File format not recognized
make: *** [prog] Fehler 1

Gruß
 
Hi.

Du mußt natürlich dann auch das Kommando zum Linken anpassen. Ich weiss nicht wie du sonst mit den bin Dateien umgehst und wie du dementsprechend das Programm erstellst?! Das mußt du schon selber wissen wie du nachher die .bin Dateien weiter verwenden kannst.

Gruß
 
Vielen Dank für alles, nun funktioniert es.

Code:
.PHONY = all

SOURCES = dat1/datei.asm dat3/dhost.asm
OBJECTS = $(SOURCES:.asm=.bin)
TARGETS = prog

all: $(OBJECTS)
%.bin : %.asm
	@nasm -f bin -o $@ $<

EDIT:// Eine Frage hab ich noch:
Beim Linux-Kernel wird ja alles in ein bzImage kompiliert.
Wie kann ich das hier machen, also das die Dateien "datei.bin" und "dhost.bin" in eine ausführbare datei kommen (Diese Datei wäre beim Kernel das bzImage)?

Gruß
 
Zuletzt bearbeitet:
Zurück