vcpkg: um gerenciador de pacotes do C++ para Windows, Linux e MacOSvcpkg: A C++ package manager for Windows, Linux and MacOS

O vcpkg é um gerenciador de pacotes de linha de comando que simplifica bastante a aquisição e instalação de bibliotecas de terceiros no 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 seu projeto usa bibliotecas de terceiros, é recomendável que você use o vcpkg para instalá-las.If your project uses third-party libraries, we recommend that you use vcpkg to install them. O vcpkg dá suporte a bibliotecas de software livre e proprietárias.vcpkg supports both open-source and proprietary libraries. Todas as bibliotecas do catálogo do vcpkg no Windows foram testadas quanto à compatibilidade com o 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 partir de maio de 2018, há mais de 900 bibliotecas no catálogo do Windows e mais de 350 no catálogo do Linux/MacOS.As of May 2018 there are over 900 libraries in the Windows catalog and over 350 in the Linux/MacOS catalog. A comunidade do C++ é adicionando mais bibliotecas a ambos os catálogos de forma contínua.The C++ community is adding more libraries to both catalogs on an ongoing basis.

Simples e flexívelSimple yet flexible

Com um único comando, você pode baixar fontes e compilar uma biblioteca.With a single command, you can download sources and build a library. O próprio vcpkg é um projeto de software livre disponível no GitHub.vcpkg is itself an open-source project, available on GitHub. Você pode personalizar seus clones particulares de qualquer forma que desejar.You can customize your private clone(s) in any way you like. Por exemplo, você pode especificar diferentes bibliotecas ou diferentes versões de bibliotecas das que são encontradas no catálogo público.For example, you can specify different libraries, or different versions of libraries than what are found in the public catalog. Você pode ter vários clones de vcpkg em um único computador, cada um gerando conjuntos personalizados de bibliotecas e/ou opções de compilação, etc. Cada clone é um ambiente x-copiável autocontido, com sua própria cópia do vcpkg.exe que funciona apenas em sua própria hierarquia.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. O vcpkg não é adicionado a nenhuma variável de ambiente e não tem nenhuma dependência no Registro do Windows ou no Visual Studio.vcpkg is not added to any environment variables, and has no dependency on the Windows Registry or Visual Studio.

Fontes não bináriasSources not binaries

Para bibliotecas no catálogo do Windows, o vcpkg baixa fontes em vez de binários[1].For libraries in the Windows catalog, vcpkg downloads sources instead of binaries[1]. Ele compila essas fontes usando o Visual Studio 2017 ou o Visual Studio 2015 se o 2017 não estiver instalado.It compiles those sources using Visual Studio 2017, or Visual Studio 2015 if 2017 is not installed. No C++, é muito importante que todas bibliotecas que você usar sejam compiladas com o mesmo compilador e com a mesma versão de compilador que o código de aplicativo que vincula-se a ela.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. Ao usar o vcpkg, você elimina ou, pelo menos, reduz bastante o potencial de binários não correspondentes e os problemas que eles podem causar.By using vcpkg, you eliminate or at least greatly reduce the potential for mismatched binaries and the problems they can cause. Em equipes que são padronizadas com uma versão específica de um compilador, um membro da equipe pode usar o vcpkg para baixar fontes e compilar um conjunto de binários e, em seguida, usar o comando de exportação para compactar os binários e os cabeçalhos para outros membros da equipe.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. Para obter mais informações, confira abaixo Exportação de binários compilados e cabeçalhos.For more information, see Export compiled binaries and headers below.

Se você criar um clone de vcpkg com bibliotecas particulares na coleção de portas, você poderá adicionar uma porta que baixa os cabeçalhos e os binários pré-criados e grave um arquivo portfile.cmake que simplesmente copia esses arquivos para o local desejado.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] Observação: as fontes não estão disponíveis para algumas bibliotecas proprietárias. O vcpkg baixará binários pré-criados compatíveis nesses casos.[1] Note: for some proprietary libraries, sources are not available. Vcpkg will download compatible prebuilt binaries in these cases.

InstalaçãoInstallation

Clonar o repositório vcpkg do GitHub: https://github.com/Microsoft/vcpkg.Clone the vcpkg repo from GitHub: https://github.com/Microsoft/vcpkg. Você pode baixar em qualquer local de pasta que você preferir.You can download to any folder location you prefer.

Execute o bootstrapper na pasta raiz: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)

Pesquisar a lista de bibliotecas disponíveisSearch the list of available libraries

Para ver quais pacotes estão disponíveis, no prompt de comando digite: vcpkg searchTo see what packages are available, at the command prompt type: vcpkg search

Este comando enumera os arquivos de controle nas subpastas vcpkg/portas.This command enumerates the control files in the vcpkg/ports subfolders. Você verá uma listagem como essa: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
...

Você pode filtrar em um padrão, por exemplo 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

Instalar uma biblioteca em seu computador localInstall a library on your local machine

Depois de obter o nome de uma biblioteca usando vcpkg search, você usa vcpkg install para baixar a biblioteca e compilá-la.After you get the name of a library by using vcpkg search, you use vcpkg install to download the library and compile it. O vcpkg usa o portfile da biblioteca no diretório de portas.vcpkg uses the library's portfile in the ports directory. Se nenhum tripleto for especificado, vcpkg instalará e compilará para o tripleto padrão para a plataforma de destino: x86-windows, x64-linux.cmake ou 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.

Para bibliotecas do Linux, vcpkg depende da instalação do gcc no computador local.For Linux libraries, vcpkg depends on gcc being installed on the local machine. No MacOS, o vcpkg usa Clang.On MacOS, vcpkg uses Clang.

Se o portfile especifica dependências, o vcpkg baixa e instala as dependências também.If the portfile specifies dependencies, vcpkg downloads and installs those also. Depois de baixar, o vcpkg compila a biblioteca usando qualquer sistema de build que a biblioteca usa.After downloading, vcpkg builds the library by using whatever build system the library uses. Os projetos CMake (no Windows) e MSBuild são preferenciais, mas há suporte para MAKE juntamente com qualquer outro sistema de build.CMake and (on Windows) MSBuild projects are preferred, but MAKE is supported along with any other build system. Se o vcpkg não pode localizar o sistema de build especificado no computador local, ele vai baixá-lo e instalá-lo.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.

Para projetos CMAKE, use CMAKE_TOOLCHAIN_FILE para disponibilizar as bibliotecas com find_package().For CMAKE projects, use use CMAKE_TOOLCHAIN_FILE to make libraries available with find_package(). Por exemplo:For example:

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

Listar as bibliotecas já instaladasList the libraries already installed

Depois de instalar algumas bibliotecas, você pode usar vcpkg list para ver o que você tem: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

Integrar com o Visual Studio (Windows)Integrate with Visual Studio (Windows)

Por usuárioPer-user

Execute vcpkg integrate install para configurar o Visual Studio para localizar todos os arquivos de cabeçalho e binários de vcpkg por usuário, sem a necessidade de edição manual dos caminhos de diretórios do 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 você tiver vários clones, o clone do qual você executa este comando se tornará o novo local padrão.If you have multiple clones, the clone from which you run this command becomes the new default location.

Agora você pode #incluir cabeçalhos simplesmente digitando a pasta/cabeçalho e o preenchimento automático ajuda você.Now you can #include headers simply by typing the folder/header, and auto-complete assists you. Não será necessária nenhuma etapa adicional para vinculação a bibliotecas ou adição de referências de projeto.No additional steps are required for linking to libs or adding project references. A ilustração a seguir mostra como o Visual Studio localiza os cabeçalhos azure-storage-cpp.The following illustration shows how Visual Studio finds the azure-storage-cpp headers. O vcpkg coloca seus cabeçalhos na subpasta /installed, particionada pela plataforma de destino.vcpkg places its headers in the /installed subfolder, partitioned by target platform. O diagrama a seguir mostra a lista de arquivos de inclusão na subpasta /was para a biblioteca:The following diagram shows the list of include files in the /was subfolder for the library:

Integração do vcpkg e IntelliSensevcpkg IntelliSense integration

Por projetoPer project

Se você precisar usar uma versão específica de uma biblioteca que é diferente da versão em sua instância vcpkg ativa, siga estas etapas: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. Faça uma cópia nova do vcpkgMake a new clone of vcpkg
  2. Modifique o portfile para a biblioteca para obter a versão necessáriaModify the portfile for the library to obtain the version you need
  3. Execute vcpkg install <library>.Run vcpkg install <library>.
  4. Use vcpkg integrate project para criar um pacote NuGet que faz referência a essa biblioteca com base em cada projeto.Use vcpkg integrate project to create a NuGet package that references that library on a per-project basis.

Integrar com o Visual Studio Code (Linux/MacOS)Integrate with Visual Studio Code (Linux/MacOS)

Execute vcpkg integrar install para configurar o Visual Studio Code no Linux/MacOS com o local da inscrição do vcpkg e habilitar o IntelliSense em arquivos de origem.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 de destino do Windows por meio do WSLTarget Linux from Windows via WSL

Você pode produzir os binários do Linux de um computador Windows usando o WSL (Subsistema do Windows para Linux).You can produce Linux binaries from a Windows machine by using the Windows Subsystem for Linux (WSL). Siga as instruções para Configurar o WSL no Windows 10 e configurá-lo com a extensão do Visual Studio para Linux.Follow the instructions to Set up WSL on Windows 10, and configure it with the Visual Studio extension for Linux. Você pode colocar todas as suas bibliotecas compiladas para Windows e Linux na mesma pasta e acessá-la do Windows e do 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.

Exportar binários compilados e cabeçalhosExport compiled binaries and headers

Exigir que todos os membros de uma equipe baixem e compilem bibliotecas poderá ser ineficiente.Requiring everyone on a team to download and build libraries can be inefficient. Um único membro da equipe pode realizar esse trabalho e, em seguida, usar vcpkg export para criar um arquivo zip dos binários e dos cabeçalhos, ou um pacote NuGet (vários formatos disponíveis), que podem ser facilmente compartilhados com outros membros da equipe.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.

Atualizar bibliotecas instaladasUpdate/upgrade installed libraries

O catálogo público é mantido atualizado com as versões mais recentes das bibliotecas.The public catalog is kept up-to-date with the latest versions of the libraries. Para determinar qual das suas bibliotecas locais está desatualizada, use vcpkg update.To determine which of your local libraries are out-of-date, use vcpkg update. Quando estiver pronto para atualizar sua coleção de portas para a versão mais recente do catálogo público, execute o comando vcpkg upgrade para baixar automaticamente e recriar uma ou todas as bibliotecas instaladas que estão desatualizadas.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.

Por padrão, o comando upgrade apenas lista as bibliotecas que estão desatualizadas, ele não as atualiza.By default, the upgrade command only lists the libraries that are out of date; it doesn’t upgrade them. Para executar a atualização, use a opção --no-dry-run.To perform the upgrade, use the --no-dry-run option.

  vcpkg upgrade --no-dry-run

Opções de atualizaçãoUpgrade Options

  • --no-dry-run Executar a atualização, quando não especificado, o comando apenas lista os pacotes desatualizados.--no-dry-run Perform the upgrade; when not specified, the command only lists the out-of-date packages.
  • --keep-going Continuar a instalar pacotes, mesmo se um falhar.--keep-going Continue installing packages even if one fails.
  • --triplet <t> Definir o tripleto padrão para pacotes não qualificados.--triplet <t> Set the default triplet for unqualified packages.
  • --vcpkg-root <path> Especificar o diretório vcpkg a ser usado em vez do diretório atual ou do diretório da ferramenta.--vcpkg-root <path> Specify the vcpkg directory to use instead of current directory or tool directory.

Exemplo de atualizaçãoUpgrade example

O exemplo a seguir mostra como atualizar somente as bibliotecas especificadas.The following example shows how to upgrade only specified libraries. Observe que o vcpkg efetua o pull de dependências conforme necessário automaticamente.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.

Contribuir com novas bibliotecasContribute new libraries

Você pode incluir todas as biblioteca que quiser em sua coleção de portas particulares.You can include any libraries you like in your private ports collection. Para sugerir uma nova biblioteca para o catálogo público, abra um problema na página de problemas do vcpkg do GitHub.To suggest a new library for the public catalog, open an issue on the GitHub vcpkg issue page.

Remover uma bibliotecaRemove a library

Digite vcpkg remove para remover uma biblioteca instalada.Type vcpkg remove to remove an installed library. Se houver outras bibliotecas que dependem dela, você deverá executar novamente o comando com --recurse, o que fará com que todas as bibliotecas dependentes sejam removidas.If any other libraries depend on it, you are asked to rerun the command with --recurse, which causes all downstream libraries to be removed.

Personalizar o vcpkgCustomize vcpkg

Você pode modificar seu clone do vcpkg da maneira que desejar.You can modify your clone of vcpkg in any way you like. Você pode criar vários clones de vcpkg e modificar os portfiles em cada um para obter versões específicas de bibliotecas ou especificar parâmetros de linha de 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. Por exemplo, em uma empresa, um grupo de desenvolvedores pode estar trabalhando em um software que tenha um conjunto de dependências e outro grupo pode ter outro conjunto de dependências.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. Você pode configurar dois clones de vcpkg e modificar cada um para baixar as versões das bibliotecas e as opções de compilação, etc., de acordo com suas necessidades.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.

Desinstalar o vcpkgUninstall vcpkg

Basta excluir o diretório.Just delete the directory.

Enviar comentários sobre o vcpkgSend feedback about vcpkg

Use o comando vcpkg contact --survey para enviar comentários para a Microsoft sobre o vcpkg, incluindo relatórios de bug e sugestões de recursos.Use the vcpkg contact --survey command to send feedback to Microsoft about vcpkg, including bug reports and suggestions for features.

A hierarquia de pasta do vcpkgThe vcpkg folder hierarchy

Todas as funcionalidades e os dados do vcpkg são autocontidos em uma única hierarquia de diretórios, chamada de uma "instância".All vcpkg functionality and data is self-contained in a single directory hierarchy, called an "instance". Não há configurações de Registro ou variáveis de ambiente.There are no registry settings or environment variables. Você pode ter qualquer quantidade de instâncias de vcpkg em um computador e elas não interferem umas nas outras.You can have any number of instances of vcpkg on a machine and they do not interfere with each other.

O conteúdo de uma instância de vcpkg é:The contents of a vcpkg instance are:

  • buildtrees – contém subpastas de fontes das quais cada biblioteca é compiladabuildtrees -- contains subfolders of sources from which each library is built
  • documentos – documentação e exemplosdocs -- documentation and examples
  • downloads – cópias em cache de quaisquer ferramentas ou fontes baixadas.downloads -- cached copies of any downloaded tools or sources. O vcpkg pesquisa aqui primeiro quando você executa o comando de instalação.vcpkg searches here first when you run the install command .
  • instalado – contém os cabeçalhos e os binários de cada biblioteca instalada.installed-- Contains the headers and binaries for each installed library. Ao integrar com o Visual Studio, você está basicamente informando para que essa pasta seja adicionada aos seus caminhos de pesquisa.When you integrate with Visual Studio, you are essentially telling it add this folder to its search paths.
  • pacotes – pasta interna de preparo entre instalações.packages -- Internal folder for staging between installs.
  • portas – arquivos que descrevem cada biblioteca no catálogo, sua versão e onde baixá-la.ports -- Files that describe each library in the catalog, its version, and where to download it. Você pode adicionar suas próprias portas se necessário.You can add your own ports if needed.
  • scripts – scripts (cmake, powershell) usados pelo vcpkg.scripts -- Scripts (cmake, powershell) used by vcpkg.
  • toolsrc – código-fonte C++ para vcpkg e componentes relacionadostoolsrc -- C++ source code for vcpkg and related components
  • tripletos – contém as configurações para cada plataforma de destino com suporte (por exemplo, Windows x86 ou Uwp x64).triplets -- Contains the settings for each supported target platform (for example, x86-windows or x64-uwp).

Referência de linha de comandoCommand-line reference

ComandoCommand DescriçãoDescription
vcpkg search [pat]vcpkg search [pat] Pesquisar pacotes disponíveis para instalaçãoSearch for packages available to install
vcpkg install <pkg>...vcpkg install <pkg>... Instalar um pacoteInstall a package
vcpkg remove <pkg>...vcpkg remove <pkg>... Desinstalar um pacoteUninstall a package
vcpkg remove --outdatedvcpkg remove --outdated Desinstalar todos os pacotes desatualizadosUninstall all out-of-date packages
vcpkg listvcpkg list Listar os pacotes instaladosList installed packages
vcpkg updatevcpkg update Exibir a lista de pacotes para atualizaçãoDisplay list of packages for updating
vcpkg upgradevcpkg upgrade Recompilar todos os pacotes desatualizadosRebuild all outdated packages
vcpkg hash <file> [alg]vcpkg hash <file> [alg] Realizar hash de um arquivo por algoritmo específico, o padrão é SHA512Hash a file by specific algorithm, default SHA512
vcpkg integrate installvcpkg integrate install Tornar pacotes instalados disponíveis a todos os usuários.Make installed packages available user-wide. Exige privilégios administrativos no primeiro usoRequires admin privileges on first use
vcpkg integrate removevcpkg integrate remove Remover a integração de todos os usuáriosRemove user-wide integration
vcpkg integrate projectvcpkg integrate project Gerar um pacote NuGet de referência para uso de projeto individual do VSGenerate a referencing NuGet package for individual VS project use
vcpkg export <pkg>... [opt]...vcpkg export <pkg>... [opt]... Exportar um pacoteExport a package
vcpkg edit <pkg>vcpkg edit <pkg> Abrir uma porta para edição (usa %EDITOR%, o “código” padrão)Open up a port for editing (uses %EDITOR%, default 'code')
vcpkg create <pkg> <url> [archivename]vcpkg create <pkg> <url> [archivename] Criar um novo pacoteCreate a new package
vcpkg cachevcpkg cache Listar pacotes compilados armazenados em cacheList cached compiled packages
vcpkg versionvcpkg version Exibir informações de versãoDisplay version information
vcpkg contact --surveyvcpkg contact --survey Exibir informações de contato para enviar comentários.Display contact information to send feedback.

OpçõesOptions

OpçãoOption DescriçãoDescription
--triplet <t>--triplet <t> Especificar o tripleto da arquitetura de destino.Specify the target architecture triplet. (padrão: %VCPKG_DEFAULT_TRIPLET%, veja também vcpkg help triplet)(default: %VCPKG_DEFAULT_TRIPLET%, see also vcpkg help triplet)
--vcpkg-root <path>--vcpkg-root <path> Especificar o diretório raiz do vcpkg (padrão: %VCPKG_ROOT%)Specify the vcpkg root directory (default: %VCPKG_ROOT%)