2010-02-05 11 views
6

Ich bin ziemlich neu in der Entwicklung von C/C++ Code in MSVS, aber eine der Dinge, die mich bereits verwirrt hat, ist nach dem Hinzufügen einer Reihe von Quell-und Header-Dateien zu meinem Projekt, so dass sie zeigen In den MSVS-Ordnern 'Source Files' und 'Header Files' muss ich dem Compiler anschließend mitteilen, wo sich meine Header-Dateien unter 'Projekt-> Eigenschaften-> C/C++ -> Allgemein' befinden. Es scheint mir, dass MSVS bereits versuchen sollte, irgendwelche 'include' ... '' - Anweisungen aufzulösen, indem zuerst die Menge der Header-Dateien durchsucht wird, die ich in das Projekt aufgenommen habe.MS Visual Studio Project-Header-Dateien

Möchte jemand die hier verwendete Logik kommentieren?

Danke, Travis

Antwort

2

Eigentlich ist in der so genannten "Header-Dateien" -Ordner Ihre Header-Dateien Hinzufügen optional. Auch ohne das gleiche zu tun, können Sie einfach den Header-Pfad in "Project-> Properties -> ...." angeben und es wird weiterhin funktionieren.

Vielleicht denken Sie nur an die Header-Dateien Ihres Projekts, die im Ordner "Header Files" hinzugefügt werden können. Wie wäre es mit einem großen Projekt mit mehreren Bibliotheken von Drittanbietern? Datei in Ihren Ordner.

Um also alle Includes einheitlich in einer Konfiguration zu haben, sollte dieser Weg gewählt sein.

Alle oben genannten Dinge sind nur mein Verständnis. Ich habe keine Beweise dafür. Also, meine Entschuldigung im Voraus ist das ist falsch. Bombardiere mich bitte nicht mit Downvotes. :)

+0

Vielen Dank Jay für Ihre Antwort. Ich stimme zu, dass große Projekte immer noch die Funktion "Projekt-> Eigenschaften" erfordern. Das heißt, ich denke immer noch, das Projekt Compiler automatisch die Projektheaderdateien verweisen, die für # include Auflösung ist eine intuitive Funktion, leicht, ohne in Konflikt mit der Notwendigkeit für zusätzliche externe Verzeichnisse umgesetzt werden könnte. Ich erkenne eine gewisse Logik in Ihrer Argumentation, dass ein einheitlicher Konfigurationsmechanismus wünschenswert ist. – Travis

+0

@Travis, Wenn Sie Dateien bemerkt hätten aus einem beliebigen Ordner auf Ihrer Festplatte zu Ihrem „Header-Dateien“ -Ordner in IDE hinzufügen kann. In Ihrer Quelldatei können Sie die Kopfzeile manchmal aus verschiedenen Gründen als "#include folder1/myheader.h" einschließen. In diesem Fall müssen Sie dem Compiler den Pfad angeben, ohne den Ordner 1 einzubeziehen. Damit die IDE es erraten kann, muss die Ordnerstruktur auf der Festplatte und der IDE zugeordnet werden, was eine unnötige Einschränkung in der IDE bedeutet. Das heißt, wenn ein benutzerfreundlicheres Feature in die IDE gebracht wird, wie Sie vorschlagen, würde ich es auf jeden Fall begrüßen. :) – Jay

2

Das Finden von Header-Dateien muss deterministisch sein. In Ihrem Projekt können mehrere Dateien mit demselben Namen vorhanden sein. In diesem Fall, wie soll der Compiler diese Verwirrung lösen?

Eine andere Sache ist, dass Verzeichnisse, wo nach Header-Dateien suchen, ein historisches Merkmal von (so ziemlich?) Alle Compiler ist.

Damit bleibt nur die Verwendung von Headerdateien in Ihrem Visual Studio-Projekt: Sie können sie einfach in Visual Studio öffnen. Das ist es !

+0

Danke Benoit für Ihre Antwort. Obwohl ich Ihnen zustimme, dass die Verwendung von Header-Dateien in einem VS-Projekt anscheinend nur so einfach ist, sie zu öffnen, denke ich, dass dies möglicherweise ein Designfehler oder zumindest nicht intuitiv ist. Wie ich in einem frühen Kommentar erwähnt bin ich nicht sicher, was der Zweck der Unter Header-Filter/Ordner, wenn nicht separate Namensräume zu schaffen, die deterministisch # include Pfade im Quelltext zu imitieren. In jedem Fall schätze ich Ihre Unterstützung, wenn es darum geht, das VS-Entwicklungsparadigma zu verstehen. – Travis

1

Zuerst haben Sie ein neues C/C++ Projekt erstellt? Wenn ja, sollte es ein Verzeichnis an einem Ort Ihrer Wahl erstellen. Sobald dies erledigt ist, können Sie mit der rechten Maustaste auf Ihr Projekt klicken (im Lösungsfenster von MSVS) und eine neue Datei zu Ihrem Projekt hinzufügen. Beispielsweise können Sie dem Projekt eine Quelldatei (.cpp) und eine Headerdatei (.h) hinzufügen. Sobald dies erledigt ist, müssen Sie #include "yourfile.h" in Ihre Quelldatei schreiben, um die Header-Datei in Ihre Quelldatei einfügen zu können. Beachten Sie, dass Sie neue Dateien und vorhandene Dateien hinzufügen können. Ich hoffe das hilft!

+0

Ja, ich habe ein C/C++ - Projekt erstellt, aber ich habe den 'Code-Wizard' verwendet. Ich habe versucht, eine Open-Source-Codebasis von Drittanbietern zu bekommen, um unter Windows zu kompilieren. Mein Ziel war, KEINEN Quellcode ändern zu müssen, da diese Codebasis bereits unter Linux und MacOS kompiliert wurde. Daher wollte ich wirklich die # include-Anweisungen nicht ändern müssen. Danke für Ihre Antwort. – Travis

+0

Ich glaube nicht, dass jeder Code ändern ... Wenn Sie ein neues Projekt erstellen, müssen Sie einfach die vorhandenen Dateien in das Projekt hinzuzufügen und das ist alles. – Partial

3

Die Projektdateien werden von der IDE verwendet, um Ihre Dateien zu verfolgen, aber der Compiler hat keinen Zugriff auf diese Informationen. Der Include-Dateipfad wird beim Kompilieren an jede Quelldatei übergeben.

+0

Während die Frage den Ausdruck "Tell the Compiler" verwendet, ist es ziemlich klar aus dem Kontext, den er in den Projekteinstellungen der IDE bedeutet. Es ist nicht unüblich (auch wenn es genau genommen ungenau ist), die IDE als "den Compiler" zu bezeichnen. –

+0

Ja, danke, ich sprach von der IDE. Als integrierte Entwicklungsumgebung ging ich davon aus, dass die Projektdateien in den Compiler integriert würden, so dass die Details der Befehlszeilenverarbeitung größtenteils abstrahiert würden. Ich verstehe jetzt, dass die IDE in gewisser Hinsicht eine etwas dünnere Fassade als der, was ich zuerst erwartet hatte. Danke für das Antworten. – Travis

3

Ich denke, dass es, weil ein Header in einem Verzeichnis bedeutet nicht unbedingt, dass Sie dieses Verzeichnis für andere Header gesucht werden soll. Dieser bestimmte Header kann durch Angeben des Pfads zum Header eingeschlossen werden, oder er wird implizit gefunden, da er sich im selben Verzeichnis wie die Datei befindet, die ihn enthält.

Alles, was gesagt wurde (und es ist nur Spekulation), ich denke, was Sie wollen, ist eine vernünftige Anfrage (es ist etwas, das mir ein kleines bisschen Frustration verursacht hat) - zumindest als eine Option oder auf Anfrage.

+0

Wie Sie sagen, ist es kein großes Problem, sobald die richtigen Einstellungen realisiert sind. Ich erwähne es nur, weil es so einfach und intuitiv zu implementieren scheint. Wenn ein Entwickler Schwierigkeiten hat, Include-Dateien zum Projekt hinzuzufügen, sollte die IDE sie meiner Meinung nach für alle # include-Anweisungen berücksichtigen. Ich habe bemerkt, dass die IDE es ermöglicht, Sub-Header-Ordner (ich glaube, sie nennt sie "Filter"?) Einzurichten, um die Verzeichnisstruktur nachzuahmen, die vom Quellcode erwartet wird. Warum, wenn der vollständige Pfad in den Projekteigenschaften angegeben werden muss? Wie auch immer, danke für deine Antwort. – Travis

0

ich hatte dieses Problem nie gesehen.Sobald Sie ein Projekt erstellt und in Ihrem Projekt dieselbe Projektordner-Headerdatei in der IDE hinzugefügt haben, können Sie die Headerdatei mit #include hinzufügen und den Quellcode kompilieren. , wenn die gewünschte Header-Datei in demselben Ordner nicht vorhanden, die u Ihr Projekt erstellen, sollte u Header-Verzeichnis in Projekteigenschaften hinzufügen, wie Sie gesagt hat :)

Verwandte Themen