vcpkg: gestione pacchetti per C++ per Windowsvcpkg: C++ Package Manager for Windows

vcpkg è un'utilità di gestione di pacchetti dalla riga di comando che semplifica notevolmente l'acquisizione e installazione di librerie di terze parti in Windows.vcpkg is a command line package manager that greatly simplifies the acquisition and installation of third-party libraries on Windows. Se un progetto usa librerie di terze parti, è consigliabile usare vcpkg per installarle.If your project uses third-party libraries, we recommend that you use vcpkg to install them. vcpkg supporta sia librerie open source che proprietarie.vcpkg supports both open-source and proprietary libraries. Tutte le librerie nel catalogo pubblico di vcpkg sono state testate per la compatibilità con Visual Studio 2015 e Visual Studio 2017.All libraries in the vcpkg public catalog have been tested for compatibility with Visual Studio 2015 and Visual Studio 2017. A maggio 2017 il catalogo includeva più di 238 librerie e la community di C++ aggiunge continuamente altre librerie.As of May 2017 there are over 238 libraries in the catalog and the C++ community is adding more libraries on an ongoing basis.

Semplice ma flessibileSimple yet flexible

Basta un unico comando per scaricare le origini e compilare una libreria.With a single command, you can download sources and build a library. vcpkg è a sua volta un progetto open source, disponibile in GitHub.vcpkg is itself an open-source project, available on GitHub. È possibile personalizzare i cloni privati nel modo preferito, ad esempio specificando librerie diverse o versioni diverse di librerie, rispetto a quelle disponibili nel catalogo pubblico.You can customize your private clone(s) in any way you like, for example by specifying different libraries, or different versions of libraries than what are found in the public catalog. È possibile creare più cloni di vcpkg in un singolo computer e ognuno potrà produrre set personalizzati di librerie e/o opzioni di compilazione e così via. Ogni clone è un ambiente completamente indipendente che è possibile gestire con Xcopy e contiene una copia propria di vcpkg.exe che opera solo sulla gerarchia specifica.You can have multiple clones of vcpkg on a single machine, each one producing custom sets of libraries and/or compilation switches, etc. Each clone is a completely self-contained, x-copyable environment with its own copy of vcpkg.exe that operates only on its own hierarchy. vcpkg non viene aggiunto ad alcuna variabile di ambiente e non ha dipendenze dal Registro di sistema di Windows o da Visual Studio.vcpkg is not added to any environment variables, and has no dependency on the Windows Registry or Visual Studio.

Origini e non file binariSources not binaries

Per le librerie nel catalogo pubblico, vcpkg scarica origini anziché i file binari[1].For libraries in the public catalog, vcpkg downloads sources instead of binaries[1]. Queste origini vengono compilate con Visual Studio 2017 o Visual Studio 2015, se non è installata la versione 2017.It compiles those sources using Visual Studio 2017, or Visual Studio 2015 if 2017 is not installed. In C++ è molto importante che tutte le librerie usate siano compilate con lo stesso compilatore e la stessa versione del compilatore del codice dell'applicazione che si collega a tali librerie.In C++, it is very important that any libraries you use are complied with the same compiler, and compiler version, as the application code that links to it. Con vcpkg è possibile evitare, o almeno ridurre notevolmente, il rischio di file binari non corrispondenti e i problemi correlati.By using vcpkg you eliminate or at least greatly reduce the potential for mismatched binaries and the problems they can cause. In team che usano una versione specifica del compilatore Visual C++ come standard, un solo membro del team può usare vcpkg per scaricare le origini e compilare un set di file binari, quindi usare il comando di esportazione per comprimere i file binari e le intestazioni per gli altri membri del team.In teams that are standardized on a specific version of the Visual C++ compiler, one team member can use vcpkg to download sources and compile a set of binaries and then use the export command to zip up the binaries and headers for other team members. Per altre informazioni, vedere Esportare file binari compilati e intestazioni di seguito.For more information, see Export compiled binaries and headers below.

Se si crea un clone di vcpkg con librerie private nella raccolta di port, è possibile aggiungere un port che scarica file binari precompilati e intestazioni, quindi scrivere un file portfile.cmake che copia semplicemente questi file nella posizione desiderata.If you create a vcpkg clone with private libraries in the ports collection, you can add a port that downloads prebuilt binaries and headers and write a portfile.cmake file that simply copies those files to the desired location.

[1] Nota: per alcune librerie proprietarie, le origini non sono disponibili. In questi casi, vcpkg scaricherà file binari precompilati compatibili.[1] Note: for some proprietary libraries, sources are not available. Vcpkg will download compatible prebuilt binaries in these cases.

InstallazioneInstallation

Clonare il repository vcpkg da GitHub: https://github.com/Microsoft/vcpkg.Clone the vcpkg repo from GitHub: https://github.com/Microsoft/vcpkg. È possibile scaricarlo nel percorso di cartella preferito.You can download to any folder location you prefer.

Eseguire il programma di avvio nella cartella radice: bootstrap-vcpkg.bat.Run the bootstrapper in the root folder: bootstrap-vcpkg.bat.

Attività di baseBasic tasks

Eseguire ricerche nell'elenco delle librerie disponibiliSearch the list of available libraries

Per visualizzare i pacchetti disponibili, al prompt dei comandi digitare: vcpkg searchTo see what packages are available, at the command prompt type: vcpkg search

Questo comando consente di enumerare i file di controllo nelle sottocartelle vcpkg/ports.This command enumerates the control files in the vcpkg/ports subfolders. Verrà visualizzato un elenco simile al seguente:You will see a listing like this:

ace       6.4.3   The ADAPTIVE Communication Environment
anax      2.1.0-1 An open source C++ entity system. <https://github...
antlr4    4.6-1   ANother Tool for Language Recognition
apr       1.5.2   The Apache Portable Runtime (APR) is a C library ...
asio      1.10.8  Asio is a cross-platform C++ library for network ...
assimp    3.3.1   The Open Asset import library
atk       2.24.0  GNOME Accessibility Toolkit
...

È possibile usare criteri per filtrare i risultati, come vcpkg search ta:You can filter on a pattern, for example vcpkg search ta:

botan       2.0.1      A cryptography library written in C++11
portaudio   19.0.6.00  PortAudio Portable Cross-platform Audio I/O API P...
taglib      1.11.1-2   TagLib Audio Meta-Data Library

Installare una libreria nel computer localeInstall a library on your local machine

Dopo avere ottenuto il nome di una libreria tramite vcpkg search, è possibile usare vcpkg install per scaricare la libreria e compilarla.After you get the name of a library by using vcpkg search, you use vcpkg install to download the library and compile it. vcpkg usa il file portfile della libreria nella directory ports.vcpkg uses the library's portfile in the ports directory. Se non viene specificata una tripletta, vcpkg eseguirà l'installazione e la compilazione per x86-windows.If no triplet is specified, vcpkg will install and compile for x86-windows. Se il file portfile specifica dipendenze, vcpkg scaricherà e installerà anche le dipendenze.If the portfile specifies dependencies, vcpkg will download and install those also. Dopo aver completato il download, vcpkg compila la libreria con qualsiasi sistema di compilazione usato dalla libreria.After downloading, vcpkg builds the library by using whatever build system the library uses. I file di progetto CMake e MSBuild sono la scelta preferita, ma sono supportati anche MAKE e qualsiasi altro sistema di compilazione.CMake and MSBuild projects files are preferred, but MAKE is supported along with any other build system. Se vcpkg non trova il sistema di compilazione specificato nel computer locale, lo scarica e installa.If vcpkg cannot find the specified build system on the local machine, it will download and install it.

> vcpkg install boost:x86-windows

The following packages will be built and installed:
    boost:x86-windows
  * bzip2:x86-windows
  * zlib:x86-windows
Additional packages (*) will be installed to complete this operation.

Elencare le librerie già installateList the libraries already installed

Dopo aver installato alcune librerie, è possibile usare vcpkg list per controllare quali sono disponibili:After you have installed some libraries, you can use vcpkg list to see what you have:

> vcpkg list

boost:x86-windows       1.64-3   Peer-reviewed portable C++ source libraries
bzip2:x86-windows       1.0.6-1  High-quality data compressor.
cpprestsdk:x86-windows  2.9.0-2  C++11 JSON, REST, and OAuth library The C++ REST ...
openssl:x86-windows     1.0.2k-2 OpenSSL is an open source project that provides a...
websocketpp:x86-windows 0.7.0    Library that implements RFC6455 The WebSocket Pro...
zlib:x86-windows        1.2.11   A compression library

Integrazione con Visual StudioIntegrate with Visual Studio

Per utentePer-user

Eseguire vcpkg integrate install per configurare Visual Studio per individuare tutti i file di intestazione e i file binari vcpkg per ogni utente, senza dover modificare manualmente i percorsi di directory di VC++.Run vcpkg integrate install to configure Visual Studio to locate all vcpkg header files and binaries on a per-user basis without the need for manual editing of VC++ Directories paths. Se sono stati creati più cloni, il clone da cui si esegue questo comando diventa il nuovo percorso predefinito.If you have multiple clones, the clone from which you run this command becomes the new default location.

È ora possibile usare #include per le intestazioni, digitando semplicemente cartella/intestazione. La funzionalità di completamento automatico faciliterà questa operazione.Now you can #include headers simply by typing the folder/header, and auto-complete will help you. Non sono necessari ulteriori passaggi per il collegamento alle librerie o l'aggiunta di riferimenti a progetti.No additional steps are required for linking to libs or adding project references. La figura seguente mostra come Visual Studio trova le intestazioni azure-storage-cpp.The following illustration shows how Visual Studio finds the azure-storage-cpp headers. vcpkg inserisce le intestazioni nella sottocartella \installed, partizionata in base alla piattaforma di destinazione.vcpkg places its headers in the \installed subfolder, partitioned by target platform. Il diagramma seguente mostra l'elenco dei file di inclusione nella sottocartella /was per la libreria:The following diagram shows the list of include files in the /was subfolder for the library:

Integrazione di Intellisense in vcpkgvcpkg Intellisense integration

Per progettoPer project

Se è necessario usare una versione specifica di una libreria, diversa dalla versione nell'istanza attiva di vcpkg, è possibile creare un nuovo clone di vcpkg, modificare il portfile per la libreria per ottenere la versione necessaria e quindi eseguire vcpkg install <library>.If you need to use a specific version of a library that is different from the version in your active vcpkg instance, you can make a new clone of vcpkg, modify the portfile for the library to obtain the version you need, and then run vcpkg install <library>. Successivamente, è possibile usare vcpkg integrate project per creare un pacchetto NuGet che fa riferimento a tale libreria per progetti specifici.After that, you can use vcpkg integrate project to create a NuGet package that references that library on a per-project basis.

Esportare i file binari compilati e le intestazioniExport compiled binaries and headers

Richiedere a tutti i membri di un team di scaricare e compilare le librerie può non essere una soluzione efficiente.Requiring everyone on a team to download and build libraries can be inefficient. Un singolo membro del team può farsi carico di questo compito e quindi usare vcpkg export per creare un file ZIP con i file binari e le intestazioni, facilmente condivisibile con gli altri membri del team.A single team member can do that work, and then use vcpkg export to create a zip file of the binaries and headers that can be easily shared with other team members.

Aggiornare le librerie installateUpdate installed libraries

Il catalogo pubblico viene mantenuto aggiornato con le versioni più recenti delle librerie.The public catalog is kept up-to-date with the latest versions of the libraries. Per determinare quali librerie locali non sono aggiornate, usare vcpkg update.To determine which of your local libraries are out-of-date, use vcpkg update. Quando si è pronti per aggiornare la raccolta di port alla versione più recente del catalogo pubblico, è sufficiente eseguire un'operazione git pull sul repository GitHub oppure creare un nuovo clone e mantenere quello precedente, se è ancora necessario.When you're ready to update your ports collection to the latest version of the public catalog, just do a git pull operation against the github repo, or create a new clone and keep the old one if it is still needed.

Contribuire con nuove librerieContribute new libraries

È possibile includere qualsiasi libreria nella raccolta di port privata.You can include any libraries you like in your private ports collection. Per suggerire una nuova libreria per il catalogo pubblico,To suggest a new library for the public catalog,

Rimuovere una libreriaRemove a library

Digitare vcpkg remove per rimuovere una libreria installata.Type vcpkg remove to remove an installed library. Se sono presenti altre librerie dipendenti, verrà richiesto di eseguire nuovamente il comando con --recurse, in modo che vengano rimosse tutte le librerie downstream.If any other libraries depend on it, you'll be asked to re-run the command with --recurse, which will cause all downstream libraries to be removed.

Personalizzare vcpkgCustomize vcpkg

È possibile modificare il clone di vcpkg nei modi preferiti.You can modify your clone of vcpkg in any way you like. Si possono creare più cloni di vcpkg e modificare i portfile in ognuno, per ottenere versioni specifiche di librerie o specificare parametri della riga di comando.You can create multiple vcpkg clones and modify the portfiles in each one to obtain specific versions of libraries or specify command-line parameters. Ad esempio, in un'organizzazione, è possibile che un gruppo di sviluppatori lavori a software con un set di dipendenze mentre un altro gruppo usa un set diverso.For example, in an enterprise, one group of developers might be working on software that has one set of dependencies, and another group might have a different set. È possibile configurare due cloni di vcpkg e modificare ognuno in modo da scaricare le versioni delle librerie, le opzioni di compilazione e altri elementi in base alle specifiche esigenze.You can set up two clones of vcpkg, and modify each one to download the versions of the libraries and the compilation switches, etc, according to your needs.

Gerarchia delle cartelle di vcpkgThe vcpkg folder hierarchy

Tutti i dati e le funzionalità di vcpkg sono inclusi in una singola gerarchia di directory, detta "istanza".All vcpkg functionality and data is completely self-contained in a single directory hierarchy; this is called an "instance". Non esistono impostazioni del Registro di sistema o variabili di ambiente.There are no registry settings or environment variables. In un computer può esistere un qualsiasi numero di istanze di vcpkg e non ci saranno interferenze.You can have any number of instances of vcpkg on a machine and they will not interfere with each other.

Il contenuto di un'istanza di vcpkg è:The contents of a vcpkg instance are:

  • buildtrees - contiene le sottocartelle delle origini da cui viene compilata ogni libreria.buildtrees -- contains subfolders of sources from which each library is built
  • docs - documentazione ed esempi.docs -- documentation and examples
  • downloads - copie memorizzate nella cache di qualsiasi origine o strumento scaricato.downloads -- cached copies of any downloaded tools or sources. Questa è prima cartella in cui vcpkg esegue la ricerca quando si esegue il comando di installazione.vcpkg searches here first when you run the install command .
  • installed - contiene le intestazioni e i file binari per ogni libreria installata.installed-- Contains the headers and binaries for each installed library. Per l'integrazione con Visual Studio, fondamentalmente si dà istruzione al programma di aggiungere questa cartella ai percorsi di ricerca.When you integrate with VIsual Studio, you are essentially telling it add this folder to its search paths.
  • packages - cartella interna per la gestione temporanea tra installazioni.packages -- Internal folder for staging between installs.
  • ports - file che descrivono ogni libreria nel catalogo, la versione e la posizione di download.ports -- Files that describe each library in the catalog, its version, and where to download it. È possibile aggiungere port personalizzati all'occorrenza.You can add your own ports if needed.
  • scripts - script (cmake, powershell) usati da vcpkg.scripts -- Scripts (cmake, powershell) used by vcpkg.
  • toolsrc - codice sorgente C++ per vcpkg e i componenti correlati.toolsrc -- C++ source code for vcpkg and related components
  • triplets - contiene le impostazioni per ogni piattaforma di destinazione supportata (ad esempio, x86-windows o x64-uwp).triplets -- Contains the settings for each supported target platform (e.g. x86-windows or x64-uwp).

Informazioni di riferimento per la riga di comandoCommand line reference

  • vcpkg search [pat] Cerca i pacchetti disponibili per la compilazionevcpkg search [pat] Search for packages available to be built
  • vcpkg install ... Installa un pacchettovcpkg install ... Install a package
  • vcpkg remove ... Disinstalla un pacchettovcpkg remove ... Uninstall a package
  • vcpkg remove --outdated Disinstalla tutti i pacchetti non aggiornativcpkg remove --outdated Uninstall all out-of-date packages
  • vcpkg list Elenca i pacchetti installativcpkg list List installed packages
  • vcpkg update Visualizza l'elenco dei pacchetti per l'aggiornamentovcpkg update Display list of packages for updating
  • vcpkg hash [alg] Esegue l'hashing di un file con un algoritmo specifico, per impostazione predefinita SHA512vcpkg hash [alg] Hash a file by specific algorithm, default SHA512
  • vcpkg integrate install Rende i pacchetti installati disponibili per tutti gli utenti.vcpkg integrate install Make installed packages available user-wide. Sono richiesti privilegi di amministratore per il primo utilizzoRequires admin privileges on first use
  • vcpkg integrate remove Rimuove l'integrazione per tutti gli utentivcpkg integrate remove Remove user-wide integration
  • vcpkg integrate project Genera un pacchetto NuGet di riferimento per l'uso in singoli progetti di Visual Studiovcpkg integrate project Generate a referencing nuget package for individual VS project use
  • vcpkg export ... [opzioni]... Esporta un pacchettovcpkg export ... [opt]... Exports a package
  • vcpkg edit Apre un port per la modifica (usa %EDITOR%, impostazione predefinita 'code')vcpkg edit Open up a port for editing (uses %EDITOR%, default 'code')
  • vcpkg import Importa una libreria precompilatavcpkg import Import a pre-built library
  • vcpkg create [nomearchivio] Crea un nuovo pacchettovcpkg create [archivename] Create a new package
  • vcpkg owns Cerca file nei pacchetti installativcpkg owns Search for files in installed packages
  • vcpkg cache Elenca i pacchetti compilati memorizzati nella cachevcpkg cache List cached compiled packages
  • vcpkg version Visualizza informazioni sulla versionevcpkg version Display version information
  • vcpkg contact Visualizza informazioni di contatto per l'invio di commenti e suggerimentivcpkg contact Display contact information to send feedback

Opzioni:Options:

--triplet <t> Specificare la tripletta dell'architettura di destinazione.--triplet <t> Specify the target architecture triplet. (impostazione predefinita: %VCPKG_DEFAULT_TRIPLET%, vedere anche vcpkg help triplet)(default: %VCPKG_DEFAULT_TRIPLET%, see also vcpkg help triplet)

--vcpkg-root <path> Specificare la directory radice di vcpkg (impostazione predefinita: %VCPKG_ROOT%)--vcpkg-root <path> Specify the vcpkg root directory (default: %VCPKG_ROOT%)