Utilizzo Visual Studio da un po 'di tempo, sviluppando principalmente per C++. Spesso avevo bisogno di creare soluzioni, che contenessero più moduli (progetti) - ad esempio una libreria di utilità, che consisteva in un paio di file .dll
.Quali sono le conseguenze dell'aggiunta di riferimenti al progetto C++ in Visual Studio?
Quando v'è la necessità di un modulo (A) per utilizzare un altro (B), v'è modello standard per questo:
- Include intestazione richiesto.
- Collega il file della libreria di output da B (ad esempio, in VS: Project Config ->
Linker
->Input
->Additional Dependencies
->'B.lib'
). - [Facoltativo] Imposta l'ordine di compilazione corretto (quindi B è costruito prima di A).
Recentemente ho iniziato a giocare con C#, perché ho deciso di sviluppare alcuni strumenti basati su GUI per il mio motore con esso (è molto più facile, rispetto all'utilizzo di C++ e le librerie esterne come Qt o wxWidgets). Ho imparato, che in C#, tali dipendenze vengono impostate utilizzando 'Riferimenti':
sono rimasto molto sorpreso, quando ho scoperto, che questa opzione è applicabile anche per i progetti C++!
In effetti, dopo aver creato una soluzione di esempio e impostato le dipendenze in questo modo, tutto funzionava correttamente, senza alcuna configurazione aggiuntiva come "Input del linker" o qualcosa del genere.
La mia domanda è: che cosa fa esattamente questa opzione fare per i progetti C++? Sono interessato a tutti i profitti e ai potenziali compromessi.
So già che causa il collegamento di output di altri progetti impostati come dipendenze. Qualunque altra cosa? Forse alcune dipendenze di runtime tra moduli di riferimento? In che modo influisce sull'output generato?
Un riferimento di progetto prende automaticamente l'output dalla configurazione di build corrispondente dell'altro progetto (libreria Debug per la build di debug dell'applicazione, ecc.). Sarebbe un bel po 'di lavoro impostarlo manualmente. –
Inoltre, dal momento che hai menzionato le DLL, sì il riferimento al progetto attiverà sia gli output di build, la libreria di importazione .lib e la DLL per il runtime. –