Eclipse

Die Praktika aus dem 1.-3. Semester

Moderator: Moderatoren

Christian Bredtmann
Administrator
Beiträge: 237
Registriert: Mo 10. Mär 2008, 04:09
Wohnort: Aachen
Kontaktdaten:

Re: Eclipse

Beitrag von Christian Bredtmann » Di 10. Jun 2008, 15:27

Ja, das ist schon sehr gut erklärt.
Ich habe auch meine Lösungen zum Versuch 7 hochgeladen.
Vielleicht hilft dir das weiter, allerdings habe ich in meiner
Makefile Pattern verwendet.

Aber ich versuch es auch nochmal zu erklären. Erstmal etwas über den Compiler:

Code: Alles auswählen

FLAGS = -O0 -g3 -Wall -fmessage-length=0
-O0 steht für die Optimierungstufe.. in diesem Fall 0, also keine Optimierung
-g3 steht für "maximale" Debugging-Informationen
-Wall steht für alle Fehler und Warnungen anzeigen
-fmessage-length=0 weist den Compiler an, keinen zeilenumbruch bei seiner diagnostischen Ausgabe (zB Fehler) zu machen

Code: Alles auswählen

g++ $(FLAGS) -c -o obj/main.o src/main.cpp
Hier wird das Compiler-Frontend g++ mit den vorher definierten Flags aufgerufen.
-c bedeutet, dass nur die Objektdatei erstellt werden soll ohne dass diese bereits gelinkt wird.
-o legt die Output-Datei fest
und die nachfolgende Datei ist die Source-Datei.
Mit -I (großes i) kann man noch zusätzliche Include-Ordner angeben
mit -L Library-Ordner und
mit -l (kleines L) den Namen(!) (nicht der Dateiname) der statischen Bibliothek, wobei libABCD.a der Dateiname für eine Library namens ABCD ist.

Mit

Code: Alles auswählen

ar -r <Dateiname der Bibliothek> <Objektdateien>
fasst man mehrere Objekte zu einem Archiv zusammen, welches dann später durch den Linker statisch mit der ausführbaren Datei verbunden werden kann.

Soweit zum Compiler ...

Nun zur eigentlich Makefile:
Wenn man bei eclipse ein C++ Makefile Projekt ausgewählt hat und dann auf Build klickt, wird von eclipse eigentlich nur "make -f makefile all" aufgerufen.
Das ist Quasi-Standard und ist auch der Grund dafür, dass man bei makefiles mit (dem Ziel/Target) "all" anfängt.
Alles was nach dem "all:" steht sind die Abhängigkeiten die "all" hat. Das sind für gewöhnlich alle Objekte des Projekts, also $(OBJS) wenn OBJS die Variable mit allen mit Leerzeichen getrennten Objekten ist.

zB:

Code: Alles auswählen

OBJS= obj/klasse1.o obj/klasse2.o obj/main.o
all: $(OBJS)
<tab>(Anweisungen)
Bevor die Anweisung(en) die unter "all: $(OBJS)" stehen ausgeführt werden, betrachtet make erstmal alle Abhängigkeiten.
Dafür sucht es in dem Makefile nach dem gleichnamigen Ziel und findet dann zB einen eintrag wie

Code: Alles auswählen

obj/klasse1.o: src/klasse1.cpp
<tab>g++ .....
Make weiß jetzt, dass Source-Dateien, wenn sie denn vorhanden sind, keine Abhängigkeiten in sich haben. Allerdings prüft make, ob das Ziel oder die Abhängigkeiten neuer/aktueller sind. Die Anweisungen werden also nur ausgeführt, wenn das Ziel älter ist als die Abhängigkeiten.
Das ganze passiert für jedes Objekt, deswegen muss auch für jedes Objekt ein Eintrag vorhanden sein (außer man benutzt Pattern).
Eigentlich ist die Struktur einer Makefile nicht schwer, nur die Compiler Anweisungen können verwirrend sein.

So, ich hoffe ich habe nichts wichtiges vergessen..

Gruß Christian

Benutzeravatar
[MD]
Beiträge: 389
Registriert: Mi 16. Apr 2008, 14:26

Re: Eclipse

Beitrag von [MD] » Di 10. Jun 2008, 15:56

Jo dankeschön, soweit hatte ich das auch mithilfe eines Tutorials aus dem Netz verstanden, habe aber den Absatz mit der Bibliothek überlesen...

Mittlerweile klappt das mit dem Makefile auch einigermaßen. Ein dankeschön auch an Stefan Liebich (ohne l ;-) ).

Das Skript ist sehr dürftig meiner Meinung nach... vieles wird da nicht vernünftig erklärt, eher nur so nebenbei erwähnt...schlimm!! Auch scheint es, als ob die Kapitel von verschiedenen Leuten ohne gegenseitige Absprache verfasst wurden...(Klassen direkt am Anfang und dann doch erst bei Kapitel 6, oder die doppelte Erklärung von Arrays...)

Weiß eigentlich jemand, ob man den 11 Versuch machen muss um das Testat zu bekommen?? Denn sonst machen wir ja nur Blocktestate, aber wir dürfen doch einmal nicht anwesend sein?!
Ciao [MD]

IriZ
Beiträge: 469
Registriert: Sa 19. Apr 2008, 20:35

Re: Eclipse

Beitrag von IriZ » Do 12. Jun 2008, 12:41

Wir dürfen in Info einmal nicht anwesend sein? Ich dachte, das gäbs nur in Etechnik im Praktikum?
:D Ich wär sofort nicht da, ich hasse das Praktikum... könnte aber daran liegen, das ich absolut schlecht im Programmieren bin und ungefähr zehnmal so lange brauch, wie vorgesehn... :)

rego
Beiträge: 31
Registriert: Do 17. Apr 2008, 18:53

Re: Eclipse

Beitrag von rego » Do 12. Jun 2008, 15:27

kann mir jemand bei diesem problem weiterhelfen ?

D:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -length=0
collect2: ld returned 1 exit status
mingw32-make: *** [all] Error 1

Christian Bredtmann
Administrator
Beiträge: 237
Registriert: Mo 10. Mär 2008, 04:09
Wohnort: Aachen
Kontaktdaten:

Re: Eclipse

Beitrag von Christian Bredtmann » Do 12. Jun 2008, 17:12

Hey,

da hast du wahrscheinlich aus Versehen bei den Compiler Flags ein
Leerzeichen bei "-fmessage-length=0" gemacht. Das gehört aber zusammen.

rego
Beiträge: 31
Registriert: Do 17. Apr 2008, 18:53

Re: Eclipse

Beitrag von rego » Do 12. Jun 2008, 22:40

ne, das hatte ich auch schon ausprobiert :(

ich glaub aber ich hab die falsche kopiert, das koennte der fehler sein nachdem ich das leerzeichen hingemacht habe
auf jedenfall war vorher ein ähnlicher.

ich habe mir auch deine makefile angesehn und diese auch kopiert und ausprobiert aber an dem fehler hatte sich nichts geändert, muss wohl woanders dran liegen wenn deine makefiles bei dir funktionieren.

hab die sachen leider alle auf dem rechner im cip-pool von versuch 7, sobald ich die hier habe lad ich den kram mal hoch

Timur
Beiträge: 92
Registriert: Di 22. Apr 2008, 23:02

Re: Eclipse

Beitrag von Timur » Mi 18. Jun 2008, 21:43

Kann mir jemand etwas zu dieser Fehlermeldung sagen?:

Error launching external scanner info generator (gcc -E -P -v -dD C:/Users/Timur/Documents/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp)

Es wird beim kompilieren keine Bibliothek erstellt. Es passiert sozusagen gar nichts.

Christian Bredtmann
Administrator
Beiträge: 237
Registriert: Mo 10. Mär 2008, 04:09
Wohnort: Aachen
Kontaktdaten:

Re: Eclipse

Beitrag von Christian Bredtmann » Mi 18. Jun 2008, 22:53

Hey.

Wahrscheinlich hast du MinGW nicht installiert oder den Pfad dahin nicht in die Umgebungsvariable PATH eingetragen.

Antworten

Zurück zu „Praktika“