vcpkg: utilità per la gestione dei pacchetti per C++ per Windows, Linux e MacOSvcpkg: A C++ package manager for Windows, Linux and MacOS

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, Linux e MacOS.vcpkg is a command-line package manager that greatly simplifies the acquisition and installation of third-party libraries on Windows, Linux and MacOS. 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 di Windows per vcpkg sono state testate per la compatibilità con Visual Studio 2015 e Visual Studio 2017.All libraries in the vcpkg Windows catalog have been tested for compatibility with Visual Studio 2015 and Visual Studio 2017. A partire da maggio 2018 sono disponibili più di 900 librerie nel catalogo di Windows e più di 350 nel catalogo di Linux/MacOS.As of May 2018 there are over 900 libraries in the Windows catalog and over 350 in the Linux/MacOS catalog. La community di C++ aggiunge continuamente altre librerie a entrambi i cataloghi.The C++ community is adding more libraries to both catalogs 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,You can customize your private clone(s) in any way you like. ad esempio specificando librerie diverse o versioni diverse di librerie, rispetto a quelle disponibili nel catalogo pubblico.For example, you can specify 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 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 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 del catalogo Windows, vcpkg scarica origini anziché file binari[1].For libraries in the Windows 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. Nei team che usano una versione specifica del compilatore 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 a 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 automatico nella cartella radice:Run the bootstrapper in the root folder:

  • bootstrap-vcpkg.bat (Windows)bootstrap-vcpkg.bat (Windows)
  • ./bootstrap-vcpkg.sh (Linux, MacOS)./bootstrap-vcpkg.sh (Linux, MacOS)

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, ad esempio 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 si specifica alcuna tripletta, vcpkg esegue installazione e compilazione per la tripletta predefinita per la piattaforma di destinazione: x86-windows, x64-linux.cmake o x64-osx.cmake.If no triplet is specified, vcpkg will install and compile for the default triplet for the target platform: x86-windows, x64-linux.cmake, or x64-osx.cmake.

Per le librerie di Linux, vcpkg dipende dal fatto che gcc sia installato o meno nel computer locale.For Linux libraries, vcpkg depends on gcc being installed on the local machine. In MacOS, vcpkg usa Clang.On MacOS, vcpkg uses Clang.

Se il file portfile specifica dipendenze, vcpkg scaricherà e installerà anche le dipendenze.If the portfile specifies dependencies, vcpkg downloads and installs 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 progetti CMake e (in Windows) MSBuild sono la scelta preferita, ma sono supportati anche MAKE e qualsiasi altro sistema di compilazione.CMake and (on Windows) MSBuild projects 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 downloads and installs 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.

Per i progetti CMAKE, usare CMAKE_TOOLCHAIN_FILE per rendere disponibili le librerie con find_package().For CMAKE projects, use use CMAKE_TOOLCHAIN_FILE to make libraries available with find_package(). Ad esempio:For example:

cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake (Linux/MacOS)
cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake (Windows)

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

Integrare con Visual Studio (Windows)Integrate with Visual Studio (Windows)

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 assists 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, eseguire questi passaggi:If you need to use a specific version of a library that is different from the version in your active vcpkg instance, follow these steps:

  1. Creare un nuovo clone di vcpkgMake a new clone of vcpkg
  2. Modificare il portfile per la libreria per ottenere la versione necessariaModify the portfile for the library to obtain the version you need
  3. Eseguire vcpkg install <libreria>.Run vcpkg install <library>.
  4. Usare vcpkg integrate project per creare un pacchetto NuGet che fa riferimento a tale libreria per progetti specifici.Use vcpkg integrate project to create a NuGet package that references that library on a per-project basis.

Integrare con Visual Studio Code (Linux/MacOS)Integrate with Visual Studio Code (Linux/MacOS)

Eseguire vcpkg integrate install per configurare Visual Studio Code in Linux/MacOS con il percorso dell'integrazione vcpkg e abilitare IntelliSense per i file di origine.Run vcpkg integrate install to configure Visual Studio Code on Linux/MacOS with the location of the vcpkg enlistement and enable IntelliSense on source files.

Linux come destinazione da Windows via WSLTarget Linux from Windows via WSL

È possibile produrre file binari di Linux da un computer Windows usando il Sottosistema Windows per Linux (WSL).You can produce Linux binaries from a Windows machine by using the Windows Subsystem for Linux (WSL). Seguire le istruzioni per impostare WSL in Windows 10 e configurarlo con il estensione di Visual Studio per Linux.Follow the instructions to Set up WSL on Windows 10, and configure it with the Visual Studio extension for Linux. È possibile inserire tutte le librerie compilate per Windows e Linux nella stessa cartella e accedervi sia da Windows che da WSL.You can put all your built libraries for both Windows and Linux into the same folder and access it from both Windows and WSL.

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, o un pacchetto NuGet (sono disponibili vari formati), 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, or a NuGet package (various format available), that can be easily shared with other team members.

Aggiornare le librerie installateUpdate/upgrade 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, eseguire il comando vcpkg upgrade per scaricare e ricompilare automaticamente una o tutte le librerie installate che non sono aggiornate.When you're ready to update your ports collection to the latest version of the public catalog, run the vcpkg upgrade command to automatically download and rebuild any or all of your installed libraries that are out of date.

Per impostazione predefinita, il comando upgrade elenca solo le librerie che non sono aggiornate senza però aggiornarle.By default, the upgrade command only lists the libraries that are out of date; it doesn’t upgrade them. Per eseguire l'aggiornamento, usare l'opzione --no-dry-run.To perform the upgrade, use the --no-dry-run option.

  vcpkg upgrade --no-dry-run

Opzioni di aggiornamentoUpgrade Options

  • --no-dry-run: esegue l'aggiornamento; se omesso, il comando elenca solo i pacchetti non aggiornati.--no-dry-run Perform the upgrade; when not specified, the command only lists the out-of-date packages.
  • --keep-going: continua l'installazione di pacchetti, anche in caso di errore di uno di essi.--keep-going Continue installing packages even if one fails.
  • --triplet <t>: imposta la tripletta predefinita per i pacchetti non qualificati.--triplet <t> Set the default triplet for unqualified packages.
  • --vcpkg-root<percorso>: specifica la directory vcpkg da usare al posto della directory corrente o della directory dello strumento.--vcpkg-root <path> Specify the vcpkg directory to use instead of current directory or tool directory.

Esempio di aggiornamentoUpgrade example

L'esempio seguente illustra come aggiornare solo le librerie specificate.The following example shows how to upgrade only specified libraries. Si noti che vcpgk inserisce automaticamente le dipendenze se necessario.Note that vcpgk automatically pulls in dependencies as necessary.

c:\users\satyan\vcpkg> vcpkg upgrade tiny-dnn:x86-windows zlib
The following packages are up-to-date:
   tiny-dnn:x86-windows

The following packages will be rebuilt:
    * libpng[core]:x86-windows
    * tiff[core]:x86-windows
      zlib[core]:x86-windows
Additional packages (*) will be modified to complete this operation.
If you are sure you want to rebuild the above packages, run this command with the --no-dry-run option.

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,effettuare la segnalazione nella pagina dei problemi vcpkg di GitHub.To suggest a new library for the public catalog, open an issue on the GitHub vcpkg issue page.

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 are asked to rerun the command with --recurse, which causes 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.

Disinstallare vcpkgUninstall vcpkg

È sufficiente eliminare la directory.Just delete the directory.

Inviare commenti e suggerimenti su vcpkgSend feedback about vcpkg

Usare il comando vcpkg contact --survey per inviare a Microsoft commenti e suggerimenti su vcpkg, inclusi i report sui bug e suggerimenti per le funzionalità.Use the vcpkg contact --survey command to send feedback to Microsoft about vcpkg, including bug reports and suggestions for features.

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 self-contained in a single directory hierarchy, 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 do 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 (for example, x86-windows or x64-uwp).

Riferimenti alla riga di comandoCommand-line reference

ComandoCommand DescrizioneDescription
vcpkg search [pat]vcpkg search [pat] Cerca i pacchetti disponibili da installareSearch for packages available to install
vcpkg install <pacchetto>...vcpkg install <pkg>... Installa un pacchettoInstall a package
vcpkg remove <pacchetto>...vcpkg remove <pkg>... Disinstalla un pacchettoUninstall a package
vcpkg remove --outdatedvcpkg remove --outdated Disinstalla tutti i pacchetti non aggiornatiUninstall all out-of-date packages
vcpkg listvcpkg list Elenca i pacchetti installatiList installed packages
vcpkg updatevcpkg update Visualizza l'elenco di pacchetti per l'aggiornamentoDisplay list of packages for updating
vcpkg upgradevcpkg upgrade Ricompila tutti i pacchetti non aggiornatiRebuild all outdated packages
vcpkg hash <file> [alg]vcpkg hash <file> [alg] Esegue l'hashing di un file con un algoritmo specifico, per impostazione predefinita SHA512Hash a file by specific algorithm, default SHA512
vcpkg integrate installvcpkg integrate install Rende i pacchetti installati disponibili per tutti gli utenti.Make installed packages available user-wide. Sono richiesti privilegi di amministratore per il primo utilizzoRequires admin privileges on first use
vcpkg integrate removevcpkg integrate remove Rimuove l'integrazione per tutti gli utentiRemove user-wide integration
vcpkg integrate projectvcpkg integrate project Genera un pacchetto NuGet di riferimento per l'uso in singoli progetti di Visual StudioGenerate a referencing NuGet package for individual VS project use
vcpkg export <pacchetto>... [opt]...vcpkg export <pkg>... [opt]... Esporta un pacchettoExport a package
vcpkg edit <pacchetto>vcpkg edit <pkg> Apre un port per la modifica (usa %EDITOR%, impostazione predefinita 'code')Open up a port for editing (uses %EDITOR%, default 'code')
vcpkg create <pacchetto> <url> [archivename]vcpkg create <pkg> <url> [archivename] Crea un nuovo pacchettoCreate a new package
vcpkg cachevcpkg cache Elenca i pacchetti compilati memorizzati nella cacheList cached compiled packages
vcpkg versionvcpkg version Visualizza le informazioni sulla versioneDisplay version information
vcpkg contact --surveyvcpkg contact --survey Visualizza informazioni di contatto per l'invio di commenti e suggerimenti.Display contact information to send feedback.

OpzioniOptions

OpzioneOption DescrizioneDescription
--triplet <t>--triplet <t> Specifica la tripletta dell'architettura di destinazioneSpecify 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 <percorso>--vcpkg-root <path> Specifica la directory radice di vcpkg (impostazione predefinita: %VCPKG_ROOT%)Specify the vcpkg root directory (default: %VCPKG_ROOT%)