Condividi tramite


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_maine gmock_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 è falseattualmente , 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 e vcpkg-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.