Dove cerca Visual Studio per i file di intestazione C ++?


94

Ho controllato una copia di un'applicazione C ++ da SourceForge (HoboCopy, se sei curioso) e ho provato a compilarla.

Visual Studio mi dice che non riesce a trovare un particolare file di intestazione. Ho trovato il file nell'albero dei sorgenti, ma dove devo metterlo, in modo che venga trovato durante la compilazione?

Esistono directory speciali?

Risposte:


114

Visual Studio cerca le intestazioni in questo ordine:

  • Nella directory di origine corrente.
  • Nelle directory di inclusione aggiuntive nelle proprietà del progetto ( Progetto -> Proprietà [nome progetto] , in C / C ++ | Generale).
  • In Visual Studio C ++ Includi directory in StrumentiOpzioniProgetti e soluzioniDirectory VC ++ .
  • Nelle nuove versioni di Visual Studio (2015+) l'opzione precedente è deprecata e un elenco di directory di inclusione predefinite è disponibile in Proprietà progettoConfigurazioneDirectory VC ++

Nel tuo caso, aggiungi la directory che è l'intestazione alle proprietà del progetto ( Proprietà del progettoConfigurazioneC / C ++GeneraleDirectory di inclusione aggiuntive ).


3
Bella risposta, ma devo aggiungere che in Visual Studio 2003 dovresti guardare "Strumenti | Opzioni | Directory VC ++" e non "Strumenti | Opzioni | Progetti e soluzioni | Directory VC ++".
Graf

36
il preprocessore in VS 2010 esamina la directory corrente solo se viene utilizzata la sintassi di inclusione tra virgolette (ad esempio #include "any.h"). L'uso delle parentesi angolari (ad esempio #include <any.h>) omette la
directory

5
In Visual Studio 2010 e versioni successive, le "directory C ++ standard" non sono più in strumenti-> opzioni e si trovano in una scheda delle proprietà globale: blogs.msdn.com/b/vsproject/archive/2009/07/07/…
Mooing Duck

8
Mi chiedo che nessuno abbia ancora detto solo la directory predefinita. Quindi, eccolo qui <root dir of Visual Studio>/VC/include/. Ho un MSVC nel mio PC di lavoro dell'utente precedente, ma utilizzo GNU / Linux e non volevo avviare VC solo per soddisfare la mia curiosità di guardare le intestazioni di Microsoft®. A proposito, sul tipo di curiosità che avevo: ho scoperto che l'MSDN non sapeva nemmeno i propri nomi di intestazione! Cioè si riferiscono a Iphlpapi.h, ma un file del genere non esiste, il suo nome è piuttosto iphlpapi.h, o IPHlpApi.h(entrambi ci sono)! lol
Hi-Angel

17
L'opzione "VS> Strumenti> Opzioni> Progetti e soluzioni> Directory VC ++" è ora obsoleta.
BG BRUNO

21

In realtà sul mio Windows 10 con la community di Visual Studio 2017, il percorso delle intestazioni C ++ è:

  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

Il primo contiene le intestazioni standard di C ++, come <iostream>, <algorithm>. Il secondo contiene vecchie intestazioni C come <stdio.h>,<string.h> . Il numero di versione può essere diverso in base al software.

Spero che questo possa aiutare.


1
Questa è la risposta più diretta a OP. Sebbene altre risposte parlino di altri problemi, questa dovrebbe essere la risposta accettata.
winux

@linrongbin Sto scavenging nelle directory che sono state create dall'ultima installazione di VS Build Tools. Hai ragione sul primo. Ma ho deselezionato l'opzione Windows SDK, quindi ciò significa effettivamente che non ho intestazioni C, il che a sua volta significa che il flusso di lavoro C ++ in BuildTools non supporta C.
Hatebit

11

Se il progetto è stato fornito con un file di progetto di Visual Studio, dovrebbe essere già configurato per trovare le intestazioni per te. In caso contrario, dovrai aggiungere la directory dei file di inclusione alle impostazioni del progetto facendo clic con il pulsante destro del mouse sul progetto e selezionando Proprietà, facendo clic su "C / C ++" e aggiungendo la directory contenente i file di inclusione alle "Directory di inclusione aggiuntive" casella di modifica.


6

Ho provato ad aggiungere questo come commento al messaggio di Rob Prouse , ma la mancanza di formattazione lo ha reso inintelligibile.

In Visual Studio 2010, la finestra di dialogo "Strumenti | Opzioni | Progetti e soluzioni | Directory VC ++" segnala che "La modifica delle directory VC ++ in Strumenti> Opzioni è stata deprecata", proponendo di utilizzare il Gestore proprietà piuttosto controintuitivo.

Se vuoi davvero aggiornare il valore predefinito $ (IncludePath), devi hackerare la voce appropriata in uno dei file XML:

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

o

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

(Probabilmente non consigliato da Microsoft.)


6

Sembra che ci sia un bug nella community di Visual Studio 2015. Per un progetto a 64 bit, la cartella di inclusione non viene trovata a meno che non si trovi nell'elenco delle cartelle di inclusione aggiuntive della configurazione win32 bit .


3
Hai un link a questo bug o un riferimento ad esso per favore?
Preet Sangha

No, l'ho trovato da solo e non l'ho segnalato
Markus

5

Esiste una domanda più recente su cosa sta rispondendo meglio al problema Come funzionano i percorsi di inclusione in Visual Studio?

Si sta rivelando il modo per farlo nelle versioni più recenti di VisualStudio

  • solo nel progetto corrente (poiché anche qui la domanda è impostata) e
  • per ogni nuovo progetto come default

Il secondo è ciò che spiega la risposta di Steve Wilkinson sopra, cosa è, come lui stesso supponeva, non ciò che Microsoft consiglierebbe.

Per dirlo la scorciatoia qui: fallo, ma fallo nella directory utente su

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

nel file XML

Microsoft.Cpp.Win32.user.props

e / o

Microsoft.Cpp.x64.user.props

e non nella directory C: \ program files -, dove ci si aspetta che risieda il Factory-File non modificato di Microsoft.

Quindi lo fai nel modo in cui lo fa anche VisualStudio e tutto è regolare.

Per maggiori informazioni sul perché farlo allo stesso modo, vedi la mia risposta .


1
Se solo il titolo contenesse "C ++" e riconoscesse il bug che cerca i percorsi a 64 bit nella sezione dei percorsi a 32 bit
Markus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.