9 Stimmen

Organisation der Quelldateien

Ich habe ein paar Probleme, meine Quelldateien zu organisieren.

Ich habe meine eigene kleine, aber wachsende Codesammlung, die ich gerne in verschiedenen Projekten verwenden würde. Das Datei- und Ordnerlayout sieht ungefähr so aus:

Bibliothek \sub1\source.h

Bibliothek \sub1\source.cpp

Bibliothek \sub2\source.h

Bibliothek \sub2\source.cpp

Eines meiner Probleme ist, dass ich diesen Code bei Bedarf in meine anderen Projekte einbinden möchte. Bisher habe ich absolute Pfade verwendet, um auf den Bibliothekscode zu verweisen, aber es muss einen besseren Weg geben.

Außerdem muss ich jede Bibliotheksdatei, die ich verwende, zu den Projektdateien von Visual Studio hinzufügen, damit sie korrekt kompiliert werden kann.

Meine Frage lautet also kurz gesagt: Wie kann ich das Problem lösen? Was ist der richtige/beste Weg, um die obige Situation zu behandeln.

3voto

Pieter Punkte 16973

Sie sollten im Allgemeinen keine Quelldateien aus Bibliotheken direkt in andere Projekte einfügen. Kompilieren Sie sie separat als Bibliothek und verwenden Sie diese.

Für die Organisation der Verzeichnisstruktur der Bibliothek selbst habe ich mich im Moment für folgende Struktur entschieden

  • library1/widget.h
  • bibliothek1/privat/onlyinlib.h
  • bibliothek1/privat/widget.cpp

(und falls zutreffend)

  • bibliothek1/privat/ressourcen/widget.jpg
  • Bibliothek1/Privat/Projekt/Widget.xcode

Ich lege alle Header direkt im Pfad der Bibliothek ab und habe einen Unterordner private die alles enthält, was nur von der Bibliothek verwendet wird, aber niemals freigegeben/offengelegt werden sollte.

Der größte Vorteil ist, dass jedes Projekt, das ich beginne, nur einen Include-Pfad braucht, der auf das Verzeichnis mit meinen Bibliotheken zeigt, dann wird jedes (öffentliche) Include wie folgt durchgeführt

#include "library1/widget.h"

private Includes sind einfach

#include "onlyinlib.h"

Dies hat eine Reihe von Vorteilen:

  • Wenn neue Bibliotheken eingeführt werden, muss man nicht mit den Projekt-/Compiler-Einstellungen herumspielen, um die Header "sichtbar" zu machen.
  • Der Wechsel zu anderen Compilern/Plattformen ist ebenfalls sehr einfach.
  • Die Header sind automatisch "namespaced", d.h. durch die Einbeziehung eines Teils des Pfades ist es nahezu unmöglich, einen Namenskonflikt mit den Includes zu bekommen
  • Es ist sofort ersichtlich, woher ein Header kommt und ob er Teil der öffentlichen Schnittstelle ist oder nicht

2voto

ChrisF Punkte 130622

Ich glaube nicht, dass es eine richtig Es hängt davon ab, was genau Sie erreichen wollen.

Hier sind einige Dinge, die Sie vielleicht noch nicht wissen:

  • Sie können in Ihren Projekten relative Pfade verwenden.

  • Sie können Umgebungsvariablen in Pfaden verwenden.

  • Sie können Verzeichnisse zu den Suchregeln von Visual Studio hinzufügen.

Dies gibt Ihnen ein wenig mehr Kontrolle darüber, wo Sie die Include-Dateien ablegen, und wenn Sie Ihre Ordner zu den Suchregeln von Visual Studio hinzufügen, müssen Sie überhaupt keine Pfade einfügen.

1voto

ijprest Punkte 4178

Wenn Sie den Code eines Drittanbieters einbinden müssen, anstatt nur mit einer vorkompilierten Version zu verlinken (z. B. wenn Sie Änderungen oder Optimierungen vornehmen müssen), sollten Sie Folgendes in Betracht ziehen Verzweigung in dem Programm, das Sie für die Versionskontrolle verwenden:

  • /trunk/... --- Ihr Code wird hier eingefügt
  • /Drittpartei --- Unverfälschte Kopien von Bibliotheken Dritter finden Sie hier
    • /dritte/ib1
    • /dritte/ib2
    • usw.
  • /trunk/lib1 --- verzweigt von: /dritte/lib1, vielleicht mit lokalen Änderungen
    • dies ist die Version, mit der Sie bauen/verknüpfen.

Unter der Voraussetzung, dass Sie ein anständiges Versionskontrollsystem verwenden, ermöglicht Ihnen dieses Schema ein einfaches Upgrade auf neuere Versionen von Bibliotheken von Drittanbietern und das anschließende Zusammenführen dieser Änderungen mit den Änderungen, die Sie lokal vorgenommen haben.

Nehmen wir zum Beispiel an, "lib1" veröffentlicht eine neue Version:

  • Übertragen Sie die Änderung in /thirdparty/lib1.
  • Zusammenführen de /dritte/ib1 à /trunk/lib1
  • Beheben Sie etwaige Zusammenführungskonflikte.

Dies ist, IMO, der einzig vernünftige Weg, um die Aktualisierung von Bibliotheken von Drittanbietern zu handhaben, an denen Sie lokale Änderungen vorgenommen haben.

0voto

RED SOFT ADAIR Punkte 11611

Erstens: Fügen Sie alle verwendeten Verzeichnisse zu den Include-Pfaden Ihres Projekts hinzu. Fügen Sie sie, wenn möglich, als relative Pfade hinzu.

Zweitens: Sie müssen alle verwendeten Bibliotheken/Quelldateien zu Ihrem Projekt hinzufügen. Dies kann entweder im Projekt-Explorer oder auf der Registerkarte Projekt->Verknüpfung geschehen. In letzterem Fall müssen Sie die verwendeten Verzeichnisse auch zu den Bibliothekspfaden des Projekts hinzufügen.

Normalerweise ist es keine gute Idee, Pfade in #include-Direktiven zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X