visual c ++: #incluir arquivos de outros projetos na mesma solução

113

Estou trabalhando em um jogo usando Visual C ++. Tenho alguns componentes em projetos separados e configurei as dependências do projeto. Como faço para #incluir um arquivo de cabeçalho de um projeto diferente? Não tenho ideia de como usar classes de um projeto em outro.

rlbond
fonte

Respostas:

200

Configurações para compilador

No projeto em que deseja #incluir o arquivo de cabeçalho de outro projeto, você precisará adicionar o caminho do arquivo de cabeçalho na seção Diretórios de inclusão adicionais na configuração do projeto.

Para acessar a configuração do projeto:

  1. Clique com o botão direito no projeto e selecione Propriedades.
  2. Selecione Propriedades de configuração-> C / C ++ -> Geral.
  3. Defina o caminho em Diretórios de inclusão adicionais.

Como incluir

Para incluir o arquivo de cabeçalho , basta escrever o seguinte em seu código:

#include "filename.h"

Observe que você não precisa especificar o caminho aqui, porque você já inclui o diretório nos Diretórios de inclusão adicionais, então o Visual Studio saberá onde procurá-lo.

Se você não quiser adicionar todos os locais de arquivo de cabeçalho nas configurações do projeto, pode apenas incluir um diretório até um ponto e, em seguida, #include relativo a esse ponto:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Configuração para vinculador

Se estiver usando bibliotecas estáticas (ou seja, arquivo .lib), você também precisará adicionar a biblioteca à entrada do vinculador, para que, no momento da ligação, os símbolos possam ser vinculados (caso contrário, você obterá um símbolo não resolvido):

  1. Clique com o botão direito no projeto e selecione Propriedades.
  2. Selecione Propriedades de configuração-> Linker-> Entrada
  3. Entre na biblioteca em Dependências adicionais.
LeopardSkinPillBoxHat
fonte
6
Posso apenas dizer que, depois de uma manhã lendo respostas sobre este assunto no SO, a sua é a mais clara e abrangente que já encontrei. Muito bem e obrigado!
David Hall
9
Houve uma sugestão de um usuário anônimo como, "Ao incluir o caminho para a biblioteca, certifique-se de inseri-los entre aspas se o caminho tiver espaços". Adicionando como comentário, se ajudar alguém.
iDev
2
Uma forma adicional de incluir uma biblioteca estática é, dentro das "dependências do projeto" da solução, configurar o projeto para ser uma dependência da biblioteca estática a ser vinculada. Levei muito tempo para descobrir por que um dos meus projetos estava vinculando corretamente e o outro não - era por isso.
Stuart Wood
3
Eu gostaria de salientar que usar "Diretórios de inclusão adicionais" com o diretório de arquivo de origem do outro projeto pode ser uma ideia terrível. O outro projeto pode ter arquivos com os mesmos nomes (muito provavelmente se você estiver usando cabeçalhos pré-compilados para cada um). Pessoalmente, prefiro adicionar a pasta pai dos arquivos de origem dos projetos, para que você possa pelo menos especificar você mesmo, por exemplo #include "proj2\include.h". Ter vários projetos por solução parece muito direcionado para as linguagens NET, já que são usadas de forma muito diferente. No entanto, para encontrar uma ótima maneira de superar isso para projetos C ++.
Deji
18
Isso é um pouco ruim. O VS pode fazer muito automaticamente. Difícil de acreditar que não haja uma solução melhor em comparação com a codificação do caminho - a configuração de dependência do projeto ou algo semelhante pode ser bom.
Cookie de
4

#includenão tem nada a ver com projetos - apenas diz ao pré-processador "coloque o conteúdo do arquivo de cabeçalho aqui". Se você fornecer a ele um caminho que aponta para o local correto (pode ser um caminho relativo, como ../seu_arquivo.h), ele será incluído corretamente.

Você terá, no entanto, que aprender sobre bibliotecas (bibliotecas estáticas / dinâmicas) para fazer esses projetos vincularem corretamente - mas essa é outra questão.

Assaf Lavie
fonte
3

Como os dois projetos estão na mesma solução, há uma maneira mais simples de incluir arquivos e vinculador, conforme descrito em https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- projetos? view = vs-2019 :

  1. A inclusão pode ser escrita em um caminho relativo (por exemplo #include "../libProject/libHeader.h").
  2. Para o vinculador, clique com o botão direito em "Referências", clique em Adicionar Referência e escolha o outro projeto.
Benav
fonte
Bom e simples, mas é uma pena que o caminho relativo seja necessário em todos os lugares em que você inclui um cabeçalho.
yoyo,
2

Você precisa definir o caminho para os cabeçalhos nas propriedades do projeto para que o compilador procure lá ao tentar encontrar o (s) arquivo (s) de cabeçalho. Não me lembro a localização exata, mas olhe nas propriedades do projeto e você verá.

Rosstificado
fonte
O local pode ser em Propriedades> C / C ++> Geral> Diretórios de inclusão adicionais.
Mustafa Kemal
0

Tente evitar referências de caminho completas na diretiva #include, sejam elas absolutas ou relativas. Em vez disso, adicione a localização da pasta de inclusão do outro projeto nas configurações do projeto. Use apenas subpastas nas referências de caminho quando necessário. Dessa forma, é mais fácil mover as coisas sem ter que atualizar seu código.

cdonner
fonte
0

Expandindo a resposta de @Benav, minha abordagem preferida é:

  1. Adicione o diretório da solução aos seus caminhos de inclusão:
    • clique com o botão direito no seu projeto no Solution Explorer
    • selecione Propriedades
    • selecione Todas as configurações e todas as plataformas nos menus suspensos
    • selecione C / C ++> Geral
    • adicionar $(SolutionDir)aos diretórios de inclusão adicionais
  2. Adicione referências a cada projeto que deseja usar:
    • clique com o botão direito nas referências do seu projeto no Solution Explorer
    • selecione Adicionar Referência ...
    • selecione o (s) projeto (s) que deseja referir

Agora você pode incluir cabeçalhos de seus projetos referenciados como:

#include "OtherProject/Header.h"

Notas:

  • Isso pressupõe que seu arquivo de solução está armazenado uma pasta acima de cada um de seus projetos, que é a organização padrão ao criar projetos com Visual Studio.
  • Agora você pode incluir qualquer arquivo de um caminho relativo à pasta da solução, o que pode não ser desejável, mas pela simplicidade da abordagem, estou de acordo com isso.
  • A etapa 2 não é necessária para #includes, mas define as dependências de compilação corretas, que você provavelmente deseja.
yoyo
fonte