018
26.01.2007, 01:16 Uhr
0xdeadbeef
Gott (Operator)
|
Also, als einfaches Beispiel, ein Projekt mit vier Dateien:
| C++: |
// foo.h
// Include-Guards, um doppelte includes zu verhindern #ifndef INCLUDED_FOO_H #define INCLUDED_FOO_H
class foo { public: void bar() const; void baz() const; };
#endif
|
| C++: |
// foo_bar.cpp
#include "foo.h"
#include <iostream>
void foo::bar() const { std::cout << "foo::bar" << std::endl; }
|
| C++: |
// foo_baz.cpp
#include "foo.h"
#include <iostream>
void foo::baz() const { std::cout << "foo::baz" << std::endl; }
|
| C++: |
// main.cpp
#include "foo.h"
int main() { foo qux;
qux.bar(); qux.baz(); }
|
Je nach Compiler und IDE sieht die Projekteinbindung dann unterschiedlich aus, in den meisten Fällen wird es da ne Aufteilung in Header- und Quellcode-Dateien geben. Sämtliche .cpp-Dateien kommen zu den Quellcode-Dateien, die .h zu den Header-Dateien. Dann auf "Kompilieren" klicken. Auf der Kommandozeile mit g++ sähe das so aus ($ als Prompt-Zeichen für die Konsole):
| Shell: |
$ g++ -c foo_bar.cpp $ g++ -c foo_baz.cpp $ g++ -c main.cpp $ g++ -o programm foo_bar.o foo_baz.o main.o
|
Die .o-Dinger sind Objektdateien, in die die Quellcode-Dateien übersetzt werden, die werden dann vom Linker zur executable (oder, in manchen Fällen, Bibliothek) zusammengelinkt.
(Kürzer geht da auch)
| Shell: |
$ g++ -o programm foo_bar.cpp foo_baz.cpp main.cpp
|
(...aber das würde den Mechanismus ja nicht erklären)
Vielleicht lesenswert: www.eng.hawaii.edu/Tutor/Make/
Das ist zwar C-bezogen, aber der Mechanismus ist in C++ im Grunde derselbe. Jedenfalls, solange du nicht mit templates arbeitest, bei denen ist es...naja, im Grunde dasselbe, weil templates in ihrer Gesamtheit Deklarationen sind, aber es ist trotzdem etwas unintuitiv, wenn mans das erste mal macht. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 26.01.2007 um 01:19 Uhr von 0xdeadbeef editiert. |