PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschiede GCC



Otto-mit-gewehr
09-06-2005, 07:57
Hallo Community!

ich hätte mal eine Frage bezüglich GCC und seinen Kommandos.
wenn ich GCC installiere habe ich ja nicht nur den befehl gcc, sondern auch cpp
g++, etc. worin unterscheiden die sich?

Meine cpp-programme kann ich nur mit cpp kompilieren, wozu brauch ich dann noch die anderen befehle?

Und zudem, was genau macht eigentlich der behehl make?
Wenn ich kompiliert habe, kann ich das programm ausführen und brauche dafür kein make..

wäre nett , wenn mich da jemand mal aufklären könnte!

Gruß
Otto=)

Alex_K
09-06-2005, 09:30
gcc ist hat nich nur ein c++ compiler. mit dem befehl gcc kannst du C programme kompilieren, mit g++ (bzw. cpp) kannst du c++ programme kompilieren, mit gcj java, ...

mit make kannst das kompilieren automatisieren, das macht wenn du eine einzelne datei kompilierst noch nicht viel sinn, aber sobald du mehrerer dateien kompilieren musst ist es bequemer "make" einzutippen, als alles in der richtigen reihenfolge manuell zu kompilieren.

Otto-mit-gewehr
09-06-2005, 09:55
hallo alex,

danke für deine antwort!
wie arbeitet eigentlich make?
erkennt der selbst die richtige reihenfolge oder wie funktioniert das?

Boron
09-06-2005, 10:17
Damit make arbeiten kann benötigt es eine Datei, in der die korrekte Reihenfolge der Dateien und die Compileroptionen drin steht, das sogenannte "Makefile".

Ein klitzekleines Beispiel:
programm: liste.o
<tabulator>gcc -o programm liste.o

liste.o: liste.c
<tabulator>gcc -c liste.cWas make damit macht ist ganz einfach.

1. make schaut nach was das große Ziel ist: das "programm" soll erstellt werden.
2. Dann wird geprüft, ob alle für programm nötigen Teile (liste.o) vorhanden sind.
3.a Wenn ja, wird programm erstellt (gcc -o programm liste.o).
3.b Wenn nein, muss erst liste.o erstellt werden.
4. Dazu muss liste.c vorhanden sein.
5. Diese wird mit gcc -c liste.c erstellt.
6. Nun sind alle Abhängigkeiten für programm erfüllt und der Linker kann programm erstellen.

Das wirklich witzige von make ist aber, dass es automatisch erkennt, ob sich einen Quelldatei seit dem letzten mal kompilieren verändert hat oder nicht. Wenn nicht, dann muss diese Datei nicht ein weiteres Mal übersetzt werden. So kann bei großen Projekten viel Zeit gespart werden.

Wenn du aus dem Netz ein Programm als Quellpaket lädst, dann musst du doch meistens ein configure-Skript ausführen. Dieses Skript erstellt automatisch ein Makefile, wobei es die nötigen Informationen aus anderen Dateien erhält.

Otto-mit-gewehr
09-06-2005, 10:27
ahh, vielen dank!

Jetzt kapiere ich die Zusammenhänge!

anda_skoa
09-06-2005, 10:35
Zusätzlich zum dem was die anderen schon geschrieben haben.


wenn ich GCC installiere habe ich ja nicht nur den befehl gcc, sondern auch cpp, g++, etc. worin unterscheiden die sich?


Wenn du eine Datei hast, die anhand der Dateiendung als C++ Source erkennbar ist, kompiliert auch gcc den C++ Code korrekt.
Der wesentliche Unterschied bei der Verwendung von gcc statt g++ ist im Falle des Linkens, weil g++ die C++ Standardbibliotheken wenn nötig automatisch linkt, gcc nicht.



Und zudem, was genau macht eigentlich der behehl make?
Wenn ich kompiliert habe, kann ich das programm ausführen und brauche dafür kein make..


Wie Boron mit seinem Beispiel gezeigt hat, ist make ein Regelinterpreter, der meistens zum Erstellen von Programmen benutzt wird.

Eine Regel hat immer einen Namen, gefolgt von einer Liste von Abhängigkeiten und danach eine beliebige Anzahl von Befehlen, wie die Regel erfüllt werden kann.

Die Defaultregel heißt "all", wenn make ohne Parameter aufgerufen wird, wird diese Regel bearbeitet.
Man kann aber jederzeit auch eine der untergeordneten oder unabhängigen Regeln bearbeiten lassen.



all: foo bar

foo:
echo FOO

bar:
echo BAR

foobar:
echo FOOBAR


#> make
bearbeitet all, was die Abarbeitung von foo und bar nachsich zieht

#> make foo
bearbeitet nur Regel foo

#> make foobar
bearbeitet nur Regel foobar

Ciao,
_