Visual C ++: # Dateien aus anderen Projekten in derselben Lösung einschließen

113

Ich arbeite an einem Spiel mit Visual C ++. Ich habe einige Komponenten in separaten Projekten und habe die Projektabhängigkeiten festgelegt. Wie kann ich eine Header-Datei aus einem anderen Projekt # einschließen? Ich habe keine Ahnung, wie man Klassen aus einem Projekt in einem anderen verwendet.

rlbond
quelle

Antworten:

199

Einstellungen für den Compiler

In dem Projekt, in dem Sie die Header-Datei aus einem anderen Projekt einschließen möchten, müssen Sie den Pfad der Header-Datei zu den zusätzlichen Include-Verzeichnissen hinzufügen der Projektkonfiguration in den Abschnitt .

So greifen Sie auf die Projektkonfiguration zu:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften.
  2. Wählen Sie Konfigurationseigenschaften-> C / C ++ -> Allgemein.
  3. Legen Sie den Pfad unter Zusätzliche Einschlussverzeichnisse fest.

Wie man einschließt

Um die Header-Datei einzuschließen, schreiben Sie einfach Folgendes in Ihren Code:

#include "filename.h"

Beachten Sie, dass Sie den Pfad hier nicht angeben müssen, da Sie das Verzeichnis bereits in die zusätzlichen Einschlussverzeichnisse aufnehmen, damit Visual Studio weiß, wo es gesucht werden muss.

Wenn Sie nicht jeden Speicherort der Header-Datei in den Projekteinstellungen hinzufügen möchten, können Sie einfach ein Verzeichnis bis zu einem Punkt einfügen und dann #include relativ zu diesem Punkt einfügen:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Einstellung für Linker

Wenn Sie statische Bibliotheken (z. B. .lib-Datei) verwenden, müssen Sie die Bibliothek auch zur Linkereingabe hinzufügen, damit die Symbole zur Verknüpfungszeit verknüpft werden können (andernfalls erhalten Sie ein ungelöstes Symbol):

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften.
  2. Wählen Sie Konfigurationseigenschaften-> Linker-> Eingabe
  3. Geben Sie die Bibliothek unter Zusätzliche Abhängigkeiten ein.
LeopardSkinPillBoxHat
quelle
6
Darf ich nur sagen, dass Sie nach einem Morgen, in dem Sie Antworten zu diesem Thema auf SO gelesen haben, Ihre klarsten und umfassendsten Antworten erhalten haben. Gut gemacht und danke!
David Hall
9
Es gab einen Vorschlag eines anonymen Benutzers: "Wenn Sie den Pfad für die Bibliothek einfügen, stellen Sie sicher, dass Sie ihn in Anführungszeichen setzen, wenn der Pfad Leerzeichen enthält." Hinzufügen als Kommentar, wenn es jemandem hilft.
iDev
2
Eine zusätzliche Möglichkeit, eine statische Bibliothek einzuschließen, besteht darin, das Projekt innerhalb der "Projektabhängigkeiten" der Lösung als Abhängigkeit der zu verknüpfenden statischen Bibliothek zu konfigurieren. Es dauerte ewig, bis ich herausgefunden hatte, warum eines meiner Projekte korrekt verknüpft war und der andere war nicht - deshalb.
Stuart Wood
3
Ich möchte darauf hinweisen, dass die Verwendung von "Additional Include Directories" mit dem Quelldateiverzeichnis des anderen Projekts eine schreckliche Idee sein kann. Das andere Projekt enthält möglicherweise Dateien mit demselben Namen (sehr wahrscheinlich, wenn Sie für jedes vorkompilierte Header verwenden). Persönlich ziehe ich es vor, den übergeordneten Ordner der Projektquelldateien hinzuzufügen, damit Sie sich zumindest selbst angeben können, z #include "proj2\include.h". Mehrere Projekte pro Lösung zu haben, scheint sehr auf die NET-Sprachen ausgerichtet zu sein, da sie sehr unterschiedlich verwendet werden. Um einen großartigen Weg zu finden, dies für C ++ - Projekte zu überwinden.
Deji
18
Das ist ein bisschen mies. VS kann so viel automatisch tun. Kaum zu glauben, dass es keine bessere Lösung gibt, als den Pfad hart zu codieren - die Einstellung der Projektabhängigkeit oder ähnliches könnte hilfreich sein.
Cookie
4

#includehat nichts mit Projekten zu tun - es teilt dem Präprozessor lediglich mit, "den Inhalt der Header-Datei hier abzulegen". Wenn Sie ihm einen Pfad geben, der auf die richtige Position verweist (kann ein relativer Pfad sein, wie z. B. ../your_file.h), wird er korrekt eingeschlossen.

Sie müssen sich jedoch mit Bibliotheken (statischen / dynamischen Bibliotheken) vertraut machen, damit solche Projekte ordnungsgemäß verknüpft werden können - aber das ist eine andere Frage.

Assaf Lavie
quelle
3

Da sich beide Projekte unter derselben Lösung befinden, gibt es eine einfachere Möglichkeit für die Include-Dateien und den Linker, wie unter https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- beschrieben. projekte? view = vs-2019 :

  1. Das Include kann in einen relativen Pfad (zB #include "../libProject/libHeader.h") geschrieben werden.
  2. Klicken Sie für den Linker mit der rechten Maustaste auf "Referenzen", klicken Sie auf Referenz hinzufügen und wählen Sie das andere Projekt aus.
Benav
quelle
Schön und einfach, aber es ist schade, dass der relative Pfad überall dort benötigt wird, wo Sie einen Header einfügen.
Jojo
2

Sie müssen den Pfad zu den Headern in den Projekteigenschaften festlegen, damit der Compiler dort nachschaut, wenn er versucht, die Header-Datei (en) zu finden. Ich kann mich nicht an den genauen Ort erinnern, aber schauen Sie sich die Projekteigenschaften an und Sie sollten ihn sehen.

Rosstified
quelle
Der Speicherort kann unter Eigenschaften> C / C ++> Allgemein> Zusätzliche Include-Verzeichnisse sein.
Mustafa Kemal
0

Vermeiden Sie vollständige Pfadreferenzen in der Direktive #include, unabhängig davon, ob sie absolut oder relativ sind. Fügen Sie stattdessen den Speicherort des Include-Ordners des anderen Projekts in Ihren Projekteinstellungen hinzu. Verwenden Sie bei Bedarf nur Unterordner in Pfadreferenzen. Auf diese Weise ist es einfacher, Dinge zu verschieben, ohne Ihren Code aktualisieren zu müssen.

cdonner
quelle
0

Mein bevorzugter Ansatz ist, @ Benavs Antwort zu erweitern:

  1. Fügen Sie das Lösungsverzeichnis zu Ihren Include-Pfaden hinzu:
    • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt
    • Wählen Sie Eigenschaften
    • Wählen Sie in den Dropdown-Listen Alle Konfigurationen und Alle Plattformen aus
    • Wählen Sie C / C ++> Allgemein
    • $(SolutionDir)zu den zusätzlichen Include-Verzeichnissen hinzufügen
  2. Fügen Sie Verweise zu jedem Projekt hinzu, das Sie verwenden möchten:
    • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Referenzen Ihres Projekts
    • Wählen Sie Referenz hinzufügen ...
    • Wählen Sie die Projekte aus, auf die Sie verweisen möchten

Jetzt können Sie Header aus Ihren referenzierten Projekten wie folgt einfügen:

#include "OtherProject/Header.h"

Anmerkungen:

  • Dies setzt voraus, dass Ihre Lösungsdatei in einem Ordner von jedem Ihrer Projekte gespeichert ist. Dies ist die Standardorganisation beim Erstellen von Projekten mit Visual Studio.
  • Sie könnten nun auch jede Datei aus einem Pfad relativ zum Lösungsordner einfügen, was möglicherweise nicht wünschenswert ist, aber der Einfachheit halber bin ich damit einverstanden.
  • Schritt 2 ist für #includes nicht erforderlich , legt jedoch die richtigen Build-Abhängigkeiten fest, die Sie wahrscheinlich möchten.
yoyo
quelle