İngilizce dilinde oku

Aracılığıyla paylaş


Öğretici: Komut satırından bağımlılık yükleme

İpucu

Bağımlılıklarınızı yüklemenin önerilen yöntemi için "Bildirim dosyasından bağımlılık yükleme" bölümüne bakın.

Uyarı

Bazı vcpkg özellikleri klasik modda kullanılamaz.

vcpkg iki işlem moduna sahiptir: klasik mod ve bildirim modu. Bu makalede, klasik modu kullanarak paketlerin nasıl yükleneceği açıklanmaktadır. Çoğu kullanıcı için bunun yerine bildirim modunu kullanmanızı öneririz.

Klasik modda, bağımlılıklarınızı ortak bir yükleme dizinine yüklemek için komut satırı arabirimi olarak vcpkg kullanırsınız. Genellikle, içinde %VCPKG_ROOT%/installedbulunur, burada %VCPKG_ROOT% vcpkg'nin yükleme dizinidir.

Bu öğreticide şunları öğreneceksiniz:

Önkoşullar

  • vcpkg
  • Terminal
  • Kod düzenleyicisi
  • C++ derleyicisi
  • (İsteğe bağlı) CMake veya MSBuild

1 - Proje oluşturma

Yeni bir klasörde şu içeriklere sahip adlı main.cxx bir kaynak dosya oluşturun:

#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));
  }
}

Kod, içindeki vcpkg genel kayıt defterinde https://github.com/Microsoft/vcpkgbulunan açık kaynak kitaplıklarına başvurur: cxxopts, fmtve range-v3;

2 - vcpkg'yi derleme sisteminizle tümleştirme

Bu adımda, projeyi her derlediğinizde proje bağımlılıklarınızın otomatik olarak yüklenmesi veya geri yüklenmesi için vcpkg'yi CMake veya MSBuild ile tümleştirmeyi göstereceğiz.

Farklı bir derleme sistemi kullanıyorsanız sonraki adıma geçin: Bağımlılıkları yükleme.

MSBuild projelerinizde vcpkg kullanmak için aşağıdaki komutu çalıştırın:

vcpkg integrate install

KOMUTUNU yalnızca MSBuild tümleştirmesini vcpkg integrate install ilk kez etkinleştirmek istediğinizde çalıştırmanız gerekir. Bu, mevcut ve gelecekteki tüm projeleriniz için MSBuild tümleştirmesini etkinleştirir. MSBuild sistem genelinde tümleştirmeyi kaldırmak için kullanın vcpkg integrate remove .

Bu tümleştirme yöntemi, vcpkg yüklü paketleri aşağıdaki proje özelliklerine otomatik olarak ekler: Include Directories, Link Directoriesve Link Libraries. Ayrıca bu, gerekli DLL'lerin derleme çıktı klasörüne kopyalanmasını sağlayan bir derleme sonrası eylemi oluşturur. Bu, Visual Studio 2015 veya daha yeni bir sürümünü kullanan tüm çözümler ve projeler için çalışır.

3 - Bağımlılıkları yükleme

Kod açık kaynak kitaplıklarına başvurur: cxxopts, fmtve range-v3; bunların tümü konumundaki https://github.com/Microsoft/vcpkgvcpkg genel kayıt defterinde kullanılabilir.

Bu paketleri yüklemek için komutunu kullanın 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 - Projeyi oluşturma

Önemli

Yüklü paketlerinizin üçlüsünün projenizin yapılandırmasıyla eşleştiğinden emin olun. x64-windows-static 64 bit projeleriniz ve x86-windows 32 bit projeleriniz için veya x86-windows-static kullanınx64-windows.

Sistem genelinde tümleştirme etkinleştirildiğinde, projeyi oluşturmak için komutunu çalıştırmanız msbuild gerekir:

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.

Sonraki Adımlar

Bu öğreticide, komut satırı arabirimi olarak vcpkg kullanarak basit bir proje için bağımlılıkları yüklemişsinizdir.

Şimdi deneyebileceğiniz bazı ek görevler şunlardır: