vcpkg nei progetti MSBuild
Metodi di integrazione
Integrazione a livello di utente
Per usare vcpkg nei progetti MSBuild, eseguire il comando seguente:
vcpkg integrate install
È sufficiente eseguire il comando la prima volta che si vuole abilitare l'integrazione vcpkg integrate install
di MSBuild. In questo modo si abilita l'integrazione di MSBuild per tutti i progetti esistenti e futuri.
Se sono presenti più istanze di vcpkg, è possibile usare il comando per aggiornare l'istanza vcpkg integrate install
vcpkg usata in MSBuild. Usare vcpkg integrate remove
per rimuovere l'integrazione a livello di utente di MSBuild.
Questo metodo di integrazione aggiunge automaticamente i pacchetti installati da vcpkg alle proprietà del progetto seguenti: Includi directory, directory di collegamento e librerie di collegamento. Viene inoltre creata un'azione di post-compilazione che garantisce che tutte le DLL necessarie vengano copiate nella cartella di output della compilazione. Questa soluzione funziona per tutte le soluzioni e i progetti che usano Visual Studio 2015 o versione successiva.
Questo è tutto ciò che è necessario fare per la maggior parte delle librerie. Tuttavia, alcune librerie eseguono comportamenti in conflitto, ad esempio la ridefinizione di main()
. Poiché è necessario scegliere per progetto quale di queste opzioni in conflitto si desidera, è necessario aggiungere manualmente tali librerie agli input del linker.
Ecco alcuni esempi in cui è necessario il collegamento manuale (non un elenco completo):
- Gtest fornisce
gtest
,gmock
,gtest_main
egmock_main
- SDL2 fornisce
SDL2main
- SFML fornisce
sfml-main
- Boost.Test fornisce
boost_test_exec_monitor
Per ottenere un elenco completo per tutti i pacchetti installati, eseguire vcpkg owns manual-link
.
Importare .props
e .targets
Vcpkg può anche essere integrato nei progetti MSBuild importando in modo esplicito i scripts/buildsystems/vcpkg.props
file e scripts/buildsystems/vcpkg.targets
in ogni .vcxproj
. Usando percorsi relativi, questo consente a vcpkg di essere utilizzato da un modulo secondario e acquisito automaticamente dagli utenti quando eseguono git clone
.
Il modo più semplice per aggiungerli a ogni progetto nella soluzione consiste nel creare Directory.Build.props
file e Directory.Build.targets
nella radice del repository.
Gli esempi seguenti presuppongono che si trovino nella radice del repository con un modulo secondario di microsoft/vcpkg
in vcpkg
.
EsempioDirectory.Build.props
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>
EsempioDirectory.Build.targets
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>
Per altre informazioni su e Directory.Build.props
, vedere la sezione Personalizzare la compilazione della documentazione ufficiale di Directory.Build.targets
MSBuild.
Pacchetto NuGet collegato
Nota
Questo approccio non è consigliato per i nuovi progetti, perché rende difficile condividerli con altri utenti. Per un pacchetto NuGet portatile autonomo, vedere export command
.
I progetti VS possono anche essere integrati tramite un pacchetto NuGet. In questo modo il file di progetto verrà modificato, pertanto non è consigliabile usare questo approccio per i progetti open source.
PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg
With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"
Nota
Il pacchetto NuGet generato non contiene le librerie effettive. Funziona invece come un collegamento (o collegamento simbolico) all'installazione di vcpkg e aggiornerà "automaticamente" con eventuali modifiche (installazione/rimozione) alle librerie. Non è necessario rigenerare o aggiornare il pacchetto NuGet.
Configurazione comune
VcpkgEnabled
(Usare Vcpkg)
È possibile impostare su "false" per disabilitare in modo esplicito l'integrazione di vcpkg per il progetto
VcpkgConfiguration
(Configurazione Vcpkg)
Se i nomi di configurazione sono troppo complessi per vcpkg per indovinare correttamente, è possibile assegnare questa proprietà a o Debug
in modo esplicito indicare a Release
vcpkg quale variante delle librerie si desidera utilizzare.
VcpkgEnableManifest
(Usare il manifesto Vcpkg)
Questa proprietà deve essere impostata su true
per utilizzare da un file locale vcpkg.json
. Se impostato su false
, tutti i file locali vcpkg.json
verranno ignorati.
Questa impostazione predefinita è false
attualmente , ma verrà utilizzata per impostazione predefinita true
in futuro.
VcpkgTriplet
(Triplet)
Questa proprietà controlla il triplo da cui utilizzare le librerie, ad esempio x64-windows-static
o arm64-windows
.
Se non è impostato in modo esplicito, vcpkg dedurrà il triplo corretto in base alle impostazioni di Visual Studio. vcpkg dedurrà solo triplette che usano il collegamento alla libreria dinamica e il collegamento CRT dinamico; se si desidera che le dipendenze statiche o usino il CRT statico (/MT
), sarà necessario impostare manualmente il tripletto.
È possibile visualizzare il triplo dedotto automaticamente impostando il livello di dettaglio di MSBuild su Normal o superiore:
Collegamento: CTRL+Q "compilazione ed esecuzione"
Strumenti - Opzioni ->> Progetti e soluzioni -> Compilazione ed esecuzione -> Dettaglio output compilazione progetto MSBuild
Vedi anche Triplette
VcpkgHostTriplet
(Tripletta host)
Può essere impostato su un triplo personalizzato da usare per la risoluzione delle dipendenze dell'host.
Se non è impostato, per impostazione predefinita verrà impostato il triplo "nativo" (x64-windows).
Vedere anche Dipendenze host.
VcpkgInstalledDir
(Directory installata)
Questa proprietà definisce il percorso da cui vcpkg installerà e utilizzerà le librerie.
In modalità manifesto questa impostazione predefinita è $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\
. In modalità classica, questa impostazione predefinita è $(VcpkgRoot)\installed\
.
VcpkgApplocalDeps
(DLL distribuite localmente dall'app)
Questa proprietà abilita o disabilita il rilevamento e la copia delle DLL dipendenti dall'albero installato vcpkg alla directory di output del progetto.
VcpkgXUseBuiltInApplocalDeps
(Usare la distribuzione app-local predefinita)
Questa proprietà, se abilitata, usa l'implementazione sperimentale della distribuzione della DLL locale app predefinita di vcpkg quando si distribuiscono dll in locale. Questa proprietà verrà rimossa e non avrà alcun effetto quando l'implementazione predefinita non è più sperimentale.
Questa proprietà non ha alcun effetto quando $(VcpkgApplocalDeps)
è false.
Configurazione della modalità manifesto
Per usare manifesti (vcpkg.json
) con MSBuild, è prima necessario usare uno dei metodi di integrazione precedenti. Aggiungere quindi un vcpkg.json sopra il file di progetto , ad esempio nella radice del repository di origine, e impostare la proprietà VcpkgEnableManifest
su true
. È possibile impostare questa proprietà tramite l'IDE in Project Properties Vcpkg Use Vcpkg Manifest .You can set this property via the IDE in Project Properties>Vcpkg Use Vcpkg>Manifest. Potrebbe essere necessario ricaricare l'IDE per visualizzare la pagina delle proprietà vcpkg.
vcpkg verrà eseguito durante la compilazione del progetto e installerà tutte le dipendenze elencate adiacente vcpkg_installed/$(VcpkgTriplet)/
al vcpkg.json
file. Queste librerie verranno quindi incluse automaticamente in e collegate ai progetti MSBuild.
Problemi noti
- Visual Studio 2015 non tiene traccia correttamente delle modifiche apportate
vcpkg.json
ai file evcpkg-configuration.json
e non risponderà alle modifiche a meno che non venga modificato un oggetto.cpp
.
VcpkgAdditionalInstallOptions
(Opzioni aggiuntive)
Quando si usa un manifesto, questa opzione specifica altri flag della riga di comando da passare alla chiamata dello strumento vcpkg sottostante. Può essere usato per accedere alle funzionalità che non sono ancora state esposte tramite un'altra opzione.
VcpkgManifestInstall
(Installare dipendenze Vcpkg)
Questa proprietà può essere impostata su false
per disabilitare il ripristino automatico delle dipendenze durante la compilazione del progetto. Le dipendenze devono essere ripristinate manualmente tramite la riga di comando vcpkg separatamente.