Où Visual Studio recherche-t-il les fichiers d'en-tête C ++?

94

J'ai extrait une copie d'une application C ++ de SourceForge (HoboCopy, si vous êtes curieux) et j'ai essayé de la compiler.

Visual Studio m'indique qu'il ne trouve pas de fichier d'en-tête particulier. J'ai trouvé le fichier dans l'arborescence des sources, mais où dois-je le mettre pour qu'il soit trouvé lors de la compilation?

Existe-t-il des répertoires spéciaux?

Brian Sullivan
la source

Réponses:

114

Visual Studio recherche les en-têtes dans cet ordre:

  • Dans le répertoire source actuel.
  • Dans les répertoires d'inclusion supplémentaires dans les propriétés du projet ( Projet -> [nom du projet] Propriétés , sous C / C ++ | Général).
  • Dans Visual Studio C ++, incluez les répertoires sous OutilsOptionsProjets et solutionsRépertoires VC ++ .
  • Dans les nouvelles versions de Visual Studio (2015+), l'option ci-dessus est obsolète et une liste de répertoires d'inclusion par défaut est disponible dans Propriétés du projetConfigurationRépertoires VC ++

Dans votre cas, ajoutez le répertoire de l'en-tête aux propriétés du projet ( Propriétés du projetConfigurationC / C ++GénéralRépertoires d'inclusion supplémentaires ).

Rob Prouse
la source
3
Bonne réponse, mais je dois ajouter que dans Visual Studio 2003, vous devriez regarder "Outils | Options | Répertoires VC ++" et non "Outils | Options | Projets et solutions | Répertoires VC ++".
Graf
36
le préprocesseur dans VS 2010 ne regarde dans le répertoire courant que si la syntaxe d'inclusion entre guillemets est utilisée (par exemple #include "what.h"). L'utilisation de crochets angulaires (par exemple, #include <n'importe quel.h >) omet le répertoire actuel ( msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx )
Dennis Münkle
5
Dans Visual Studio 2010 et plus récent, les «répertoires C ++ standard» ne sont plus sous tools-> options et se trouvent dans une feuille de propriétés globale: blogs.msdn.com/b/vsproject/archive/2009/07/07/…
Mooing Duck
8
Je me demande que personne n'a encore indiqué le répertoire par défaut. Alors, voilà <root dir of Visual Studio>/VC/include/. J'ai un MSVC dans mon PC de travail de l'utilisateur précédent, mais j'utilise GNU / Linux, et je ne voulais pas lancer VC juste pour satisfaire ma curiosité de regarder les en-têtes de Microsoft®. Btw, à propos du genre de curiosité que j'avais: j'ai trouvé que le MSDN ne savait même pas ses propres noms d'en-tête! Ie ils se sont référés Iphlpapi.h, mais un tel fichier n'existe pas, son nom est plutôt iphlpapi.h, non plus IPHlpApi.h(les deux sont là)! lol
Hi-Angel
17
L'option «VS> Outils> Options> Projets et solutions> Répertoires VC ++» est désormais obsolète.
BG BRUNO
21

En fait, sur ma communauté Windows 10 avec Visual Studio 2017, le chemin des en-têtes C ++ est:

  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

Le 1er contient en- têtes standard C ++ tels que <iostream>, <algorithm>. Le 2 contient anciens en- têtes C tels que <stdio.h>, <string.h>. Le numéro de version peut être différent en fonction de votre logiciel.

J'espère que cela aiderait.

linrongbin
la source
1
C'est la réponse la plus directe à OP. Bien que d'autres réponses parlent d'autres problèmes, cela devrait être la réponse acceptée.
winux
@linrongbin Je récupère les répertoires créés par la dernière installation de VS Build Tools. Vous avez raison sur le premier. Mais j'ai décoché l'option Windows SDK, ce qui signifie effectivement que je n'ai pas d'en-têtes C, ce qui signifie que le flux de travail C ++ dans BuildTools ne prend pas en charge C.
Hatebit
11

Si le projet est fourni avec un fichier de projet Visual Studio, celui-ci doit déjà être configuré pour trouver les en-têtes pour vous. Sinon, vous devrez ajouter le répertoire du fichier d'inclusion aux paramètres du projet en cliquant avec le bouton droit sur le projet et en sélectionnant Propriétés, en cliquant sur «C / C ++» et en ajoutant le répertoire contenant les fichiers d'inclusion aux «Répertoires d'inclusion supplémentaires» zone d'édition.

Adam Rosenfield
la source
6

J'ai essayé d 'ajouter ceci en tant que commentaire à la publication de Rob Prouse , mais le manque de formatage le rendait inintelligible.

Dans Visual Studio 2010, la boîte de dialogue "Outils | Options | Projets et solutions | Répertoires VC ++" signale que "La modification des répertoires VC ++ dans Outils> Options est obsolète", proposant d'utiliser le gestionnaire de propriétés plutôt contre-intuitif.

Si vous voulez vraiment, vraiment mettre à jour le $ (IncludePath) par défaut, vous devez pirater l'entrée appropriée dans l'un des fichiers XML:

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

ou

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

(Probablement pas recommandé par Microsoft.)

SteveWilkinson
la source
6

Il semble y avoir un bogue dans la communauté Visual Studio 2015. Pour un projet 64 bits, le dossier d'inclusion est introuvable sauf s'il se trouve dans la liste des dossiers d'inclusion supplémentaires de configuration win32 bit .

Markus
la source
3
Avez-vous un lien vers ce bug ou une référence à celui-ci s'il vous plaît?
Preet Sangha
Non, je l'ai trouvé moi-même et je ne l'ai pas signalé
Markus
5

Il existe une question plus récente sur ce qui répond le mieux au problème: Comment les chemins d'accès fonctionnent-ils dans Visual Studio?

Il est révélé la façon de le faire dans les nouvelles versions de VisualStudio

  • dans le projet en cours uniquement (car la question est posée ici aussi) ainsi que
  • pour chaque nouveau projet par défaut

Le second est ce que la réponse de Steve Wilkinson ci-dessus explique, ce qui, comme il le supposait lui-même, n'est pas ce que Microsoft recommanderait.

Pour le dire le plus court ici: faites-le, mais faites-le dans le répertoire des utilisateurs à

C: \ Users \ UserName \ AppData \ Local \ Microsoft \ MSBuild \ v4.0

dans le fichier XML

Microsoft.Cpp.Win32.user.props

et / ou

Microsoft.Cpp.x64.user.props

et pas dans le répertoire C: \ program files - où le fichier d'usine non modifié de Microsoft devrait résider.

Ensuite, vous le faites comme VisualStudio le fait aussi et tout est régulier.

Pour plus d' informations pourquoi le faire aussi bien, voir ma réponse là - bas .

Pablo el Puro
la source
1
Si seulement le titre contenait «C ++» et reconnaissait le bogue à la recherche de chemins 64 bits dans la section des chemins 32 bits
Markus