visual c ++: #include file da altri progetti nella stessa soluzione


113

Sto lavorando a un gioco che utilizza Visual C ++. Ho alcuni componenti in progetti separati e ho impostato le dipendenze del progetto. Come faccio a #includere un file di intestazione da un progetto diverso? Non ho idea di come utilizzare le classi di un progetto in un altro.

Risposte:


199

Impostazioni per il compilatore

Nel progetto in cui si desidera #includere il file di intestazione da un altro progetto, sarà necessario aggiungere il percorso del file di intestazione nella sezione Directory di inclusione aggiuntive nella configurazione del progetto.

Per accedere alla configurazione del progetto:

  1. Fare clic con il pulsante destro del mouse sul progetto e selezionare Proprietà.
  2. Seleziona Proprietà di configurazione-> C / C ++ -> Generale.
  3. Impostare il percorso in Directory di inclusione aggiuntive.

Come includere

Per includere il file di intestazione , scrivi semplicemente quanto segue nel tuo codice:

#include "filename.h"

Tieni presente che non è necessario specificare il percorso qui, perché includi già la directory nelle directory di inclusione aggiuntive, quindi Visual Studio saprà dove cercarla.

Se non desideri aggiungere ogni posizione del file di intestazione nelle impostazioni del progetto, puoi semplicemente includere una directory fino a un punto, quindi #include rispetto a quel punto:

// 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

Impostazione per linker

Se si utilizzano librerie statiche (ad es. File .lib), sarà anche necessario aggiungere la libreria all'input del linker, in modo che al momento del collegamento i simboli possano essere collegati (altrimenti si otterrà un simbolo non risolto):

  1. Fare clic con il pulsante destro del mouse sul progetto e selezionare Proprietà.
  2. Selezionare Proprietà di configurazione-> Linker-> Input
  3. Accedi alla libreria in Dipendenze aggiuntive.

6
Posso solo dire che dopo una mattinata di lettura delle risposte su questo argomento su SO, la tua nel modo più chiaro e completo che abbia mai incontrato. Ben fatto e grazie!
David Hall

9
C'era un suggerimento da parte di un utente anonimo del tipo "Quando includi il percorso per la libreria, assicurati di inserirli tra virgolette se il percorso ha spazi". Aggiungendolo come commento, se aiuta qualcuno.
iDev

2
Un altro modo per includere una libreria statica è, all'interno delle "dipendenze del progetto" della soluzione, configurare il progetto come una dipendenza della libreria statica a cui collegarsi. Mi ci sono voluti anni per capire perché uno dei miei progetti si collegava correttamente e l'altro no - ecco perché.
Stuart Wood

3
Vorrei sottolineare che l'utilizzo di "Directory di inclusione aggiuntive" con la directory del file sorgente dell'altro progetto può essere una pessima idea. L'altro progetto potrebbe avere file con gli stessi nomi (molto probabilmente se stai usando intestazioni precompilate per ognuno). Personalmente, preferisco aggiungere la cartella genitore dei file sorgenti del progetto, così puoi almeno specificare te stesso, ad es #include "proj2\include.h". Avere più progetti per soluzione sembra molto diretto verso i linguaggi NET, in quanto vengono utilizzati in modo molto diverso. Eppure per trovare un ottimo modo per superare questo problema per i progetti C ++.
Deji

18
Questo è un po 'scadente. VS può fare così tanto automaticamente. Difficile credere che non ci sia una soluzione migliore rispetto all'hard coding del percorso: l'impostazione delle dipendenze del progetto o simili potrebbe essere piacevole.
Cookie

4

#includenon ha nulla a che fare con i progetti - dice semplicemente al preprocessore "metti qui il contenuto del file di intestazione". Se gli dai un percorso che punta alla posizione corretta (può essere un percorso relativo, come ../tuo_file.h) verrà incluso correttamente.

Tuttavia, dovrai conoscere le librerie (librerie statiche / dinamiche) per fare in modo che tali progetti si colleghino correttamente, ma questa è un'altra domanda.


3

Poiché entrambi i progetti si trovano nella stessa soluzione, esiste un modo più semplice per includere file e linker come descritto in https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- progetti? view = vs-2019 :

  1. L'inclusione può essere scritta in un percorso relativo (Es #include "../libProject/libHeader.h".).
  2. Per il linker, fare clic con il tasto destro su "Riferimenti", fare clic su Aggiungi riferimento e scegliere l'altro progetto.

Bello e semplice, ma è un peccato che il percorso relativo sia necessario ovunque tu includa un'intestazione.
yoyo

2

È necessario impostare il percorso delle intestazioni nelle proprietà del progetto in modo che il compilatore cerchi lì quando cerca di trovare i file di intestazione. Non ricordo la posizione esatta, ma guarda le proprietà del progetto e dovresti vederlo.


La posizione può essere in Proprietà> C / C ++> Generale> Directory di inclusione aggiuntive.
Mustafa Kemal

0

Cerca di evitare riferimenti di percorso completi nella direttiva #include, siano essi assoluti o relativi. Aggiungere invece la posizione della cartella di inclusione dell'altro progetto nelle impostazioni del progetto. Utilizzare solo sottocartelle nei riferimenti di percorso quando necessario. In questo modo, è più facile spostare le cose senza dover aggiornare il codice.


0

Espandendo la risposta di @ Benav, il mio approccio preferito è:

  1. Aggiungi la directory della soluzione ai percorsi di inclusione:
    • fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni
    • seleziona Proprietà
    • selezionare Tutte le configurazioni e Tutte le piattaforme dai menu a discesa
    • selezionare C / C ++> Generale
    • aggiungere $(SolutionDir)alle directory di inclusione aggiuntive
  2. Aggiungi riferimenti a ogni progetto che desideri utilizzare:
    • fare clic con il pulsante destro del mouse sui riferimenti del progetto in Esplora soluzioni
    • selezionare Aggiungi riferimento ...
    • selezionare il / i progetto / i a cui fare riferimento

Ora puoi includere intestazioni dai tuoi progetti di riferimento in questo modo:

#include "OtherProject/Header.h"

Appunti:

  • Ciò presuppone che il file della soluzione sia archiviato una cartella in alto rispetto a ciascuno dei progetti, ovvero l'organizzazione predefinita durante la creazione di progetti con Visual Studio.
  • Ora potresti includere qualsiasi file da un percorso relativo alla cartella della soluzione, il che potrebbe non essere desiderabile ma per la semplicità dell'approccio mi va bene.
  • Il passaggio 2 non è necessario per #includes, ma imposta le dipendenze di compilazione corrette, che probabilmente desideri.
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.