2010-11-01 15 views
43

In C++, hai i file di intestazione (.h), i file (.lib) e (.dll).Quando utilizzare le dipendenze aggiuntive di Visual Studio?

In Visual Studio, è necessario fornire il percorso per la ricerca di questi file in tre luoghi diversi:

  1. Proprietà di configurazione => C/C++ => Generale => Directory di inclusione aggiuntive. Qui elenchiamo le directory "include" che si desidera cercare e rendere disponibili.

  2. Proprietà di configurazione => Linker => Generale => Directory di libreria aggiuntive. Qui si elencano le directory "lib" che si desidera cercare e rendere disponibili.

  3. Proprietà di configurazione => Linker => Input => Dipendenze aggiuntive. Qui si specifica esplicitamente i file .lib che si desidera includere.

Le domande sono:

Q1: Se si è specificato il file di intestazione a # 1 e il lib a # 2, perché/quando si vuole specificare nulla in # 3?

Q2: Vedo persone che includono una specifica versione di debug o release di una lib in # 3. Puoi specificare il debug o la versione di rilascio di una lib in # 3 e continuare a costruire in modalità di rilascio o di debug? Idealmente, quale versione del debug/release della libreria dovrebbe essere fornita qui?

risposta

30
  1. configurazione Proprietà => C/C++ => Generale => supplementari includono le directory. Qui elencherai le directory "include" che desideri vengano cercate e rese disponibili.

Questo dice al compilatore dove cercare i file di intestazione racchiusi tra parentesi angolari. Ciò influenza il modo in cui il compilatore (o il preprocessore) fa il suo lavoro.

  1. Proprietà di configurazione => Linker => Generale => Ulteriori directory di libreria. Qui elenchiamo le directory "lib" che si desidera cercare e rendere disponibili.

Questo dice al linker dove cercare le librerie (vale a dire, quali directory di guardare in). Ciò influenza il modo in cui il linker (piuttosto che il compilatore) fa il suo lavoro.

  1. proprietà di configurazione => Linker => ingresso => ​​dipendenze aggiuntive. Qui specifichi esplicitamente i file .lib che vuoi includere.

Questo dice al linker quali librerie cercare in quelle directory. Ciò influisce anche su come il linker fa il suo lavoro.

Q1: In genere se si utilizza 2, è quasi certamente necessario utilizzare anche il 3. 3 dice a quale libreria collegarsi, e 2 dice dove trovare quella libreria. Naturalmente, può essere anche più di una libreria.

Q2: Se sono fornite entrambe le librerie di debug e release, è in genere che desidera utilizzare la versione di debug in una build di debug e la versione di rilascio nella build di rilascio. Nell'angolo in alto a sinistra della finestra di dialogo selezioni la configurazione che desideri modificare. In genere si desidera specificare le directory sia per il debug che per il rilascio, ma specificare le singole librerie, una per il debug e una per il rilascio.

+1

Grazie! Un esempio di contatore, che ancora mi confonde ... Sto usando una delle librerie Boost, tokenizer. Quindi per # 1, specifico il percorso della directory \ include, e poi nel mio file .cpp, faccio solo: #include "boost/tokenizer.hpp", e facendo ciò il mio programma funziona correttamente. - Q3: come mai non ho dovuto includere la posizione della libreria \ lib (ad esempio # 2 è stato lasciato in bianco) e allo stesso modo per # 3 (ad esempio se non ho specificato la libreria esatta come mai sono stato in grado collegare con quella libreria). Grazie! – user205834

+2

@ user205834: ci sono un paio di possibilità. Innanzitutto, molte Boost sono librerie di sola intestazione, vale a dire che tutto il codice si trova nell'intestazione e che non è necessario collegarsi a nulla per utilizzarlo. In secondo luogo, per le parti che usano le librerie, normalmente usano '#pragma comment (lib," libname ")' per collegarsi alla libreria automaticamente. –

3

E giusto per evidenziare l'ovvio, non è necessario aggiungere alcun file .h che si sta utilizzando in un'impostazione di proprietà del progetto perché sono esplicitamente inclusi nel codice sorgente, che cerca le intestazioni nel percorsi che hai già fornito.

2

Inoltre, in quei punti sopra, quando aggiungi una directory, guarda il pulsante MACRO >>. ad es. potresti voler usare diverse librerie per 32 bit/64 bit/Rilascio e Debug. È possibile utilizzare la ($ ProjectDir) MACRO per fornire un collegamento relativo e ad es. il MACRO ($ DXSDK_DIR) per assicurarti di avere le librerie giuste per lo sviluppo di directx.

Quindi ho ($ DXSDK_DIR) \ Lib \ x86 e ($ DXSDK_DIR) \ Lib \ x64 che elimina anche il problema quando ci si sposta tra i sistemi operativi Windows a 32 bit e 64 bit per lo sviluppo.

1

quanto riguarda la tua Q2 ...

Per le librerie terze parti, ne approfitto Visual Studio Costruire variabili macro di comando $(Platform) e $(Configuration) entro in qualcosa di simile a questo:

Y:\dev3\cpp\cryptopp\cryptopp561\$(Platform)\Output\$(Configuration);... 

In questo modo, si è sufficiente inserire la stessa riga esatta e Visual Studio sostituire le variabili macro e cercare in \cryptopp561\Win32\Output\Release\ o \cryptopp561\Win32\Output\Debug\ a seconda della configurazione attiva. In realtà non risparmia molto la digitazione, ma aiuta a mantenere le cose coerenti e accurate.

+0

Questo dovrebbe essere $ (ConfigurationName), giusto? – vidstige

+0

No, nei miei progetti uso $ (Configurazione). Ho appena letto la documentazione per $ (ConfigurationName) e immagino che funzionerebbe anche se non l'ho ancora testato. – JasDev

Problemi correlati