Wo sucht Visual Studio nach C ++ - Headerdateien?

93

Ich habe eine Kopie einer C ++ - Anwendung von SourceForge (HoboCopy, wenn Sie neugierig sind) ausgecheckt und versucht, sie zu kompilieren.

Visual Studio teilt mir mit, dass eine bestimmte Header-Datei nicht gefunden werden kann. Ich habe die Datei im Quellbaum gefunden, aber wo muss ich sie ablegen, damit sie beim Kompilieren gefunden wird?

Gibt es spezielle Verzeichnisse?

Brian Sullivan
quelle

Antworten:

113

Visual Studio sucht nach Headern in dieser Reihenfolge:

  • Im aktuellen Quellverzeichnis.
  • In den zusätzlichen Include-Verzeichnissen in den Projekteigenschaften ( Projekt -> [Projektname] Eigenschaften unter C / C ++ | Allgemein).
  • In Visual Studio C ++ Verzeichnisse einschließen unter ExtrasOptionenProjekte und LösungenVC ++ - Verzeichnisse .
  • In neuen Versionen von Visual Studio (2015+) ist die obige Option veraltet und eine Liste der Standard-Include-Verzeichnisse finden Sie unter ProjekteigenschaftenKonfigurationVC ++ - Verzeichnisse

Fügen Sie in Ihrem Fall das Verzeichnis, in dem sich der Header befindet, zu den Projekteigenschaften hinzu ( ProjekteigenschaftenKonfigurationC / C ++AllgemeinZusätzliche Einschlussverzeichnisse ).

Rob Prouse
quelle
3
Gute Antwort, aber ich muss hinzufügen, dass Sie sich in Visual Studio 2003 "Extras | Optionen | VC ++ - Verzeichnisse" und nicht "Extras | Optionen | Projekte und Lösungen | VC ++ - Verzeichnisse" ansehen sollten.
Graf
36
Der Präprozessor in VS 2010 überprüft das aktuelle Verzeichnis nur, wenn die angegebene Include-Syntax verwendet wird (z. B. #include "Whatever.h"). Bei Verwendung von spitzen Klammern (z. B. #include <Whatever.h>) wird das aktuelle Verzeichnis ( msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx ) weggelassen
Dennis Münkle
5
In Visual Studio 2010 und neueren Versionen befinden sich die "Standard-C ++ - Verzeichnisse" nicht mehr unter tools-> options und befinden sich in einem globalen Eigenschaftenblatt: blogs.msdn.com/b/vsproject/archive/2009/07/07/…
Mooing Ente
8
Ich frage mich, dass noch niemand nur das Standardverzeichnis angegeben hat. Also, hier ist es <root dir of Visual Studio>/VC/include/. Ich habe eine MSVC in meinem Job-PC vom vorherigen Benutzer, aber ich verwende GNU / Linux und wollte VC nicht starten, nur um meine Neugier zu befriedigen, die Header von Microsoft® zu betrachten. Übrigens, was für eine Neugier ich hatte: Ich stellte fest, dass der MSDN nicht einmal seine eigenen Headernamen kennt! Das heißt , sie bezeichnet Iphlpapi.h, aber eine solche Datei nicht existiert, es ist der Name eher iphlpapi.h, entweder IPHlpApi.h(beide sind)! lol
Hi-Angel
17
Die Option "VS> Tools> Optionen> Projekte und Lösungen> VC ++ - Verzeichnisse" ist jetzt deaktiviert.
BG BRUNO
21

Unter Windows 10 mit Visual Studio 2017-Community lautet der Pfad der C ++ - Header:

  1. C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include

  2. C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt

Der erste enthält Standard-C ++ - Header wie <iostream>, <algorithm>. Die 2. enthält alte C-Header wie <stdio.h>, <string.h>. Die Versionsnummer kann je nach Software unterschiedlich sein.

Hoffe das würde helfen.

Linrongbin
quelle
1
Dies ist die direkteste Antwort auf OP. Obwohl andere Antworten über andere Themen sprechen, sollte dies die akzeptierte Antwort sein.
Winux
@linrongbin Ich bereinige die Verzeichnisse, die mit der neuesten Installation von VS Build Tools erstellt wurden. Sie haben Recht mit dem ersten. Aber ich habe die Windows SDK-Option deaktiviert, was effektiv bedeutet, dass ich keine C-Header habe, was wiederum bedeutet, dass der C ++ - Workflow in BuildTools C nicht unterstützt.
Hatebit
11

Wenn das Projekt mit einer Visual Studio-Projektdatei geliefert wurde, sollte diese bereits so konfiguriert sein, dass die Header für Sie gefunden werden. Wenn nicht, müssen Sie das Include-Dateiverzeichnis zu den Projekteinstellungen hinzufügen, indem Sie mit der rechten Maustaste auf das Projekt klicken und Eigenschaften auswählen, auf "C / C ++" klicken und das Verzeichnis mit den Include-Dateien zu den "Zusätzlichen Include-Verzeichnissen" hinzufügen. Bearbeitungsfeld.

Adam Rosenfield
quelle
6

Es wurde versucht, dies als Kommentar zu Rob Prouses Beitrag hinzuzufügen , aber die fehlende Formatierung machte es unverständlich.

In Visual Studio 2010 wird im Dialogfeld "Extras | Optionen | Projekte und Lösungen | VC ++ - Verzeichnisse" gemeldet, dass die Bearbeitung von VC ++ - Verzeichnissen unter Extras> Optionen veraltet ist, und es wird vorgeschlagen, den eher kontraintuitiven Eigenschaften-Manager zu verwenden.

Wenn Sie den Standard $ (IncludePath) wirklich, wirklich aktualisieren möchten, müssen Sie den entsprechenden Eintrag in eine der XML-Dateien hacken:

\ Programme (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ v100 \ Microsoft.Cpp.Win32.v100.props

oder

\ Programme (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ x64 \ PlatformToolsets \ v100 \ Microsoft.Cpp.X64.v100.props

(Wahrscheinlich nicht von Microsoft empfohlen.)

Steve Wilkinson
quelle
6

Es scheint einen Fehler in der Visual Studio 2015-Community zu geben. Bei einem 64-Bit-Projekt wird der Include-Ordner nur gefunden, wenn er in der Win32-Bit-Konfigurationsliste Additional Include Folders enthalten ist.

Markus
quelle
3
Haben Sie einen Link zu diesem Fehler oder einen Verweis darauf?
Preet Sangha
Nein, ich habe es selbst gefunden und nicht gemeldet
Markus
5

Es gibt eine neuere Frage, was das Problem besser trifft: Wie funktionieren Include-Pfade in Visual Studio?

In den neueren Versionen von VisualStudio wird gezeigt, wie dies funktioniert

  • nur im aktuellen Projekt (da die Frage auch hier gestellt wird) sowie
  • für jedes neue Projekt als Standard

Das zweite ist das, was die Antwort von Steve Wilkinson oben erklärt, was, wie er selbst vermutete, nicht das ist, was Microsoft empfehlen würde.

Um es hier kurz zu sagen: Mach es, aber mach es im Benutzerverzeichnis unter

C: \ Benutzer \ Benutzername \ AppData \ Local \ Microsoft \ MSBuild \ v4.0

in der XML-Datei

Microsoft.Cpp.Win32.user.props

und / oder

Microsoft.Cpp.x64.user.props

und nicht im Verzeichnis C: \ program files -, in dem sich voraussichtlich die unveränderte Factory-Datei von Microsoft befindet.

Dann machen Sie es so, wie es VisualStudio auch macht und alles ist normal.

Weitere Informationen, warum Sie es gleich machen, finden Sie in meiner Antwort dort .

Pablo el Puro
quelle
1
Wenn nur der Titel "C ++" enthält und den Fehler bestätigt, der nach 64-Bit-Pfaden im 32-Bit-Pfadabschnitt sucht
Markus