Onde o Visual Studio procura por arquivos de cabeçalho C ++?

94

Eu verifiquei uma cópia de um aplicativo C ++ do SourceForge (HoboCopy, se você estiver curioso) e tentei compilá-lo.

O Visual Studio me diz que não consegue encontrar um arquivo de cabeçalho específico. Encontrei o arquivo na árvore de origem, mas onde devo colocá-lo para que seja encontrado durante a compilação?

Existem diretórios especiais?

Brian Sullivan
fonte

Respostas:

113

O Visual Studio procura cabeçalhos nesta ordem:

  • No diretório de origem atual.
  • Nos diretórios adicionais de inclusão nas propriedades do projeto ( Projeto -> [nome do projeto] Propriedades , em C / C ++ | Geral).
  • No Visual Studio C ++, inclua diretórios em FerramentasOpçõesProjetos e soluçõesDiretórios VC ++ .
  • Nas novas versões do Visual Studio (2015+), a opção acima foi descontinuada e uma lista de diretórios de inclusão padrão está disponível em Propriedades do projetoConfiguraçãoDiretórios VC ++

No seu caso, adicione o diretório do cabeçalho às propriedades do projeto ( Propriedades do projetoConfiguraçãoC / C ++GeralDiretórios de inclusão adicionais ).

Rob Prouse
fonte
3
Boa resposta, mas devo acrescentar que no Visual Studio 2003, você deve olhar para "Ferramentas | Opções | Diretórios VC ++" e não "Ferramentas | Opções | Projetos e Soluções | Diretórios VC ++".
Graf
36
o pré-processador no VS 2010 procura no diretório atual apenas se a sintaxe de inclusão entre aspas for usada (por exemplo, #include "qualquer que seja.h"). O uso de colchetes angulares (por exemplo, #include < Whatever.h >) omite o diretório atual ( msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx )
Dennis Münkle
5
No Visual Studio 2010 e mais recente, os "diretórios C ++ padrão" não estão mais em ferramentas-> opções e estão em uma folha de propriedades global: blogs.msdn.com/b/vsproject/archive/2009/07/07/…
Mooing Pato
8
Eu me pergunto que ninguém ainda disse apenas o diretório padrão. Então, aqui está <root dir of Visual Studio>/VC/include/. Tenho um MSVC em meu PC de trabalho do usuário anterior, mas uso GNU / Linux e não queria iniciar o VC apenas para satisfazer minha curiosidade de olhar os cabeçalhos da Microsoft®. A propósito, sobre o tipo de curiosidade que eu tinha: descobri que o MSDN nem sabia seus próprios nomes de cabeçalho! Ou seja, eles se referiam Iphlpapi.h, mas esse arquivo não existe, seu nome é iphlpapi.h, também IPHlpApi.h(ambos estão lá)! lol
Hi-Angel,
17
A opção "VS> Ferramentas> Opções> Projetos e soluções> Diretórios VC ++" agora está obsoleta.
BG BRUNO
21

Na verdade, no meu windows 10 com comunidade do Visual Studio 2017, o caminho dos cabeçalhos C ++ são:

  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

O primeiro contém cabeçalhos C ++ padrão, tais como <iostream>, <algorithm>. O segundo contém os cabeçalhos de idade C, tais como <stdio.h>, <string.h>. O número da versão pode ser diferente com base no seu software.

Espero que isso ajude.

Linrongbin
fonte
1
Esta é a resposta mais direta ao OP. Embora outras respostas falem sobre outros assuntos, esta deve ser a resposta aceita.
winux
@linrongbin Estou limpando os diretórios que foram criados pela última instalação do VS Build Tools. Você está certo sobre o primeiro. Mas desmarquei a opção Windows SDK, o que significa efetivamente que não tenho cabeçalhos C, o que, por sua vez, significa que o fluxo de trabalho C ++ no BuildTools não oferece suporte a C.
Hatebit
11

Se o projeto veio com um arquivo de projeto do Visual Studio, ele já deve estar configurado para localizar os cabeçalhos para você. Caso contrário, você terá que adicionar o diretório do arquivo de inclusão às configurações do projeto clicando com o botão direito do mouse no projeto e selecionando Propriedades, clicando em "C / C ++" e adicionando o diretório que contém os arquivos de inclusão aos "Diretórios de inclusão adicionais" caixa de edição.

Adam Rosenfield
fonte
6

Tentei adicionar isso como um comentário à postagem de Rob Prouse , mas a falta de formatação o tornou ininteligível.

No Visual Studio 2010, a caixa de diálogo "Ferramentas | Opções | Projetos e Soluções | Diretórios VC ++" relata que "A edição de Diretórios VC ++ em Ferramentas> Opções foi preterida", propondo que você use o Gerenciador de Propriedades um tanto contra-intuitivo.

Se você realmente quiser atualizar o $ (IncludePath) padrão, terá que hackear a entrada apropriada em um dos arquivos XML:

\ Arquivos de programas (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ v100 \ Microsoft.Cpp.Win32.v100.props

ou

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

(Provavelmente não é recomendado pela Microsoft.)

SteveWilkinson
fonte
6

Parece haver um bug na comunidade do Visual Studio 2015. Para um projeto de 64 bits, a pasta de inclusão não é encontrada, a menos que esteja na lista de Pastas de inclusão adicionais da configuração win32 .

Markus
fonte
3
Você tem um link para este bug ou uma referência a ele, por favor?
Preet Sangha
Não, eu mesmo encontrei e não
relatei
5

Existe uma questão mais recente, o que está afetando melhor o problema, perguntando: Como funcionam os caminhos de inclusão no Visual Studio?

A maneira de fazer isso está sendo revelada nas versões mais recentes do VisualStudio

  • no projeto atual apenas (como a questão é definida aqui também), bem como
  • para cada novo projeto como padrão

A segunda é o que a resposta de Steve Wilkinson acima explica, o que é, como ele próprio se supôs, não o que a Microsoft recomendaria.

Resumindo aqui: faça, mas faça no User-Directory em

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

no arquivo XML

Microsoft.Cpp.Win32.user.props

e / ou

Microsoft.Cpp.x64.user.props

e não no diretório C: \ program files -, onde o arquivo de fábrica não modificado da Microsoft deve residir.

Então você faz da maneira que o VisualStudio também faz e tudo é normal.

Para mais informações por que fazer da mesma forma, veja minha resposta aqui .

Pablo el Puro
fonte
1
Se ao menos o título tivesse "C ++" e reconhecesse o bug que procurava caminhos de 64 bits na seção de caminhos de 32 bits
Markus