Partilhar via


Tutorial: Instalar uma dependência a partir da linha de comando

Dica

Consulte "Instalar uma dependência a partir de um arquivo de manifesto" para obter o método recomendado de instalação de suas dependências.

Advertência

Alguns recursos vcpkg não estão disponíveis no modo clássico.

VCPKG tem dois modos de operação: modo clássico e modo manifesto. Este artigo descreve como instalar pacotes usando o modo clássico. Para a maioria dos usuários, recomendamos o uso do modo de manifesto.

No modo clássico, utiliza o vcpkg como linha de comandos para instalar as suas dependências num diretório de instalação comum . Normalmente, localizado em %VCPKG_ROOT%/installed, onde %VCPKG_ROOT% é o diretório de instalação do vcpkg.

Neste tutorial, você aprenderá a:

Pré-requisitos

  • vcpkg
  • Um terminal
  • Um editor de código
  • Um compilador C++
  • (Opcional) CMake ou MSBuild

1 - Criar um projeto

Em uma nova pasta, crie um arquivo de origem chamado main.cxx com este conteúdo:

#include <cxxopts.hpp>
#include <fmt/format.h>
#include <range/v3/view.hpp>

namespace view = ranges::views;

int fib(int x)
{
  int a = 0, b = 1;

  for (int it : view::repeat(0) | view::take(x))
  {
    (void)it;
    int tmp = a;
    a += b;
    b = tmp;
  }

  return a;
}

int main(int argc, char **argv)
{
  cxxopts::Options options("fibo", "Print the fibonacci sequence up to a value 'n'");
  options.add_options()("n,value", "The value to print to", cxxopts::value<int>()->default_value("10"));

  auto result = options.parse(argc, argv);
  auto n = result["value"].as<int>();

  for (int x : view::iota(1) | view::take(n))
  {
    fmt::print("fib({}) = {}\n", x, fib(x));
  }
}

O código faz referência às bibliotecas de código aberto: cxxopts, fmte range-v3; que estão todos disponíveis no registo público da VCPKG em https://github.com/Microsoft/vcpkg.

2 - Integre o vcpkg com o seu sistema de compilação

Nesta etapa, mostramos como integrar vcpkg com CMake ou MSBuild, para que suas dependências de projeto sejam instaladas ou restauradas automaticamente sempre que você construir o projeto.

Se você estiver usando um sistema de compilação diferente, pule para a próxima etapa: Instalar dependências.

Para usar vcpkg em seus projetos MSBuild, execute o seguinte comando:

vcpkg integrate install

Você só precisa executar o comando vcpkg integrate install na primeira vez que quiser habilitar a integração do MSBuild. Isso permite a integração do MSBuild para todos os seus projetos atuais e futuros. Use vcpkg integrate remove para remover a integração de todo o sistema MSBuild.

Esse método de integração adiciona automaticamente pacotes instalados no vcpkg às seguintes propriedades do projeto: Include Directories, Link Directoriese Link Libraries. Além disso, isso cria uma ação pós-compilação que garante que todas as DLLs necessárias sejam copiadas para a pasta de saída da compilação. Isso funciona para todas as soluções e projetos que usam o Visual Studio 2015 ou mais recente.

3 - Instalar dependências

O código faz referência às bibliotecas de código aberto: cxxopts, fmte range-v3; Estes estão todos disponíveis no Registo Público VCPKG em https://github.com/Microsoft/vcpkg.

Para instalar esses pacotes, use o comando vcpkg install.

vcpkg install cxxopts fmt range-v3
$ ./vcpkg install cxxopts fmt range-v3
Computing installation plan...
The following packages will be built and installed:
    cxxopts:x64-windows -> 3.1.1
    fmt:x64-windows -> 10.0.0
    range-v3:x64-windows -> 0.12.0#1
  * vcpkg-cmake:x64-windows -> 2023-05-04
  * vcpkg-cmake-config:x64-windows -> 2022-02-06#1
Additional packages (*) will be modified to complete this operation.
(omitted)
cxxopts provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(cxxopts CONFIG REQUIRED)
    target_link_libraries(main PRIVATE cxxopts::cxxopts)

The package fmt provides CMake targets:

    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt)

    # Or use the header-only version
    find_package(fmt CONFIG REQUIRED)
    target_link_libraries(main PRIVATE fmt::fmt-header-only)

range-v3 provides CMake targets:

    # this is heuristically generated, and may not be correct
    find_package(range-v3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE range-v3::meta range-v3::concepts range-v3::range-v3)

4 - Construa o projeto

Importante

Certifique-se de que o triplete dos seus pacotes instalados correspondam à configuração do seu projeto. Use x64-windows ou x64-windows-static para seus projetos de 64 bits e x86-windows ou x86-windows-static para seus projetos de 32 bits.

Com a integração em todo o sistema habilitada, basta executar msbuild para construir o projeto:

PS D:\projects\manifest-example> msbuild
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/13/2023 3:07:36 PM.

Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  (omitted)
PrepareForBuild:
  (omitted)
InitializeBuildStatus:
  (omitted)
ComputeStdModulesCompileInputs:
  (omitted)
SetModuleDependencies:
VcpkgTripletSelection:
  Using triplet "x64-windows" from "D:\vcpkg\installed\x64-windows\"
  Using normalized configuration "Debug"
ClCompile:
  (omitted)
Link:
  (omitted)
AppLocalFromInstalled:
  pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manifest-example\x64\Debug\manifest-example.exe"
   "D:\vcpkg\installed\x64-windows\debug\bin" "x64\Debug\manifest-example.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
  D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
  Deleting file "x64\Debug\manifest-example.tlog\unsuccessfulbuild".
  Touching "x64\Debug\manifest-example.tlog\manifest-example.lastbuildstate".
Done Building Project "D:\projects\manifest-example\manifest-example.vcxproj" (default targets).

Done Building Project "D:\projects\manifest-example\manifest-example.sln" (default targets).

Build succeeded.

Próximos passos

Neste tutorial, você instalou dependências para um projeto simples usando vcpkg como uma interface de linha de comando.

Aqui estão algumas tarefas adicionais para tentar a seguir:

  • Instalar pacotes usando um arquivo de manifesto
  • Instale pacotes para plataformas personalizadas usando trigêmeos
  • Bloqueie as suas versões para compilações repetíveis usando versionamento
  • Reutilizar binários em execuções de Integração Contínua utilizando a cache binária
  • Gerencie suas bibliotecas particulares usando registros personalizados