kompilieren mit -I (includes)



  • Hallo,

    ich wage mich zur Zeit an C/C++ unter Linux (was aber keine Rolle spielt). Ich habe Schwierigkeiten zu verstehen was genau ein Kompilieren von Includes ist, also -I/<pfad>. Was bringt das bzw. was genau ist unter diesem Pfad zu finden? Sollte man bei eigenen Projekten immer einen include-pfad angeben?

    Danke euch für eure Aufklärung


  • Mod

    Was Header sind, ist dir bekannt? Irgendwo müssen diese Dateien auch zu finden sein. Es gibt eine Reihe von Standardsuchpfaden, aber man kann auch eigene Pfade hinzufügen (die dann Priorität haben). Das macht das -I. Genauer fügt das -I Pfade hinzu, die für #include <xyz> durchsucht werden, was in der Regel für die Header externer Bibliotheken (inklusive der Standardbibliothek) benutzt wird. Hingegen fügt -i einen Pfad dem Suchpfad für #include "xyz" hinzu, was normalerweise für die internen Header des Programms benutzt wird.

    (Die "..."-Variante sucht übrigens auch in den Pfaden für <...>, wenn sie in ihrem eigenen Suchpfad nicht fündig wurde)



  • Ok schon mal danke für die Erklärung. Das leuchtet mir ein.
    Gehört es zu gutem Programmierstil die Header in eigene Ordner (Indludes) zu packen? Jemand sagte mir mal das macht man so - bin hier aber misstrauisch. Bisher habe ich alle header einfach dort abgelegt wo die *.cpp files auch lagen.



  • Kommt wohl darauf an, ob die auch woanders noch gebraucht werden könnten und wie groß das Projekt ist. Für ne Lib sollte man die z. b unter Linux in /usr/local/include ablegen.



  • neuling3 schrieb:

    Hallo,

    ich wage mich zur Zeit an C/C++ unter Linux (was aber keine Rolle spielt). Ich habe Schwierigkeiten zu verstehen was genau ein Kompilieren von Includes ist, also -I/<pfad>. Was bringt das bzw. was genau ist unter diesem Pfad zu finden? Sollte man bei eigenen Projekten immer einen include-pfad angeben?

    Danke euch für eure Aufklärung

    Was denn nun? C oder C++? Du solltest dir das mal überlegen.


  • Mod

    neuling3 schrieb:

    Ok schon mal danke für die Erklärung. Das leuchtet mir ein.
    Gehört es zu gutem Programmierstil die Header in eigene Ordner (Indludes) zu packen? Jemand sagte mir mal das macht man so - bin hier aber misstrauisch. Bisher habe ich alle header einfach dort abgelegt wo die *.cpp files auch lagen.

    Du musst hier unterscheiden zwischen den Headern, die du selber intern brauchst und Headern, die dein Projekt später vielleicht anbietet, weil es zum Beispiel eine Bibliothek bereit stellt. Intern kannst du alles so machen, wie du möchtest. Bei sehr großen Projekten sieht man manchmal eigene Ordner für interne Header, öfters aber auch nicht. Gerade bei C++ (was eine andere Sprache ist als C!) hat man ja auch gerne mal Programmcode im Header, so dass eine Trennung da eher künstlich wäre. Ich mache es nicht, aber meine Projekte sind auch nur ein paar zehntausend Zeilen Code in ein paar Dutzend Dateien, da geht das noch ganz gut. Bei größeren Sachen willst du den Code sicherlich ohnehin logisch in eine Ordnerstruktur unterteilen (das mache ich auch schon, bloß innerhalb der Ordner nicht getrennt nach Headern und nicht-Headern).

    Wenn du aber vor hast, das Teile des Quellcodes nach außen sichtbar werden, dann würde ich diese Teile auf jeden Fall abtrennen, damit du immer den Überblick hast. denn dann hast du einen Bedeutungsunterschied zwischen den Headern, die später vom Anwender benutzt werden und denen, die du bloß intern benutzt.


Anmelden zum Antworten