Bagikan melalui


Tutorial: Menginstal dependensi dari baris perintah

Saran

Lihat "Instal dependensi dari file manifes" untuk metode instalasi dependensi yang direkomendasikan.

Peringatan

Beberapa fitur vcpkg tidak tersedia dalam mode klasik.

vcpkg memiliki dua mode operasi: mode klasik, dan mode manifes. Artikel ini menjelaskan cara menginstal paket menggunakan mode klasik. Untuk sebagian besar pengguna, sebaiknya gunakan mode manifes sebagai gantinya.

Dalam mode klasik, Anda menggunakan vcpkg sebagai antarmuka baris perintah untuk menginstal dependensi Anda dalam direktori penginstalan umum. Biasanya, terletak di %VCPKG_ROOT%/installed, di mana %VCPKG_ROOT% adalah direktori penginstalan vcpkg.

Dalam tutorial ini, Anda akan belajar untuk:

Prasyarat

  • vcpkg
  • Sebuah Terminal
  • Editor kode
  • Pengkompilasi C++
  • (Opsional) CMake atau MSBuild

1 - Membuat proyek

Di folder baru, buat file sumber bernama main.cxx dengan konten ini:

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

Kode mereferensikan pustaka sumber terbuka: cxxopts, fmt, dan range-v3; yang semuanya tersedia di registri publik vcpkg di https://github.com/Microsoft/vcpkg.

2 - Mengintegrasikan vcpkg dengan sistem build Anda

Dalam langkah ini kami menunjukkan kepada Anda cara mengintegrasikan vcpkg dengan CMake atau MSBuild, sehingga dependensi proyek Anda terinstal atau dipulihkan secara otomatis setiap kali Anda membangun proyek.

Jika Anda menggunakan sistem build yang berbeda, lewati ke langkah berikutnya: Instal dependensi.

Untuk menggunakan vcpkg dalam proyek MSBuild Anda, jalankan perintah berikut:

vcpkg integrate install

Anda hanya perlu menjalankan perintah vcpkg integrate install saat pertama kali anda ingin mengaktifkan integrasi MSBuild. Ini memungkinkan integrasi MSBuild untuk semua proyek Anda yang ada dan yang akan datang. Gunakan vcpkg integrate remove untuk menghapus integrasi seluruh sistem MSBuild.

Metode integrasi ini secara otomatis menambahkan paket yang diinstal vcpkg ke properti proyek berikut: Include Directories, Link Directories, dan Link Libraries. Selain itu, ini membuat tindakan pasca-build yang memastikan bahwa semua DLL yang dibutuhkan disalin ke dalam folder output build. Ini berfungsi untuk semua solusi dan proyek menggunakan Visual Studio 2015 atau yang lebih baru.

3 - Menginstal dependensi

Kode mereferensikan pustaka sumber terbuka: cxxopts, fmt, dan range-v3; ini semua tersedia di registri publik vcpkg di https://github.com/Microsoft/vcpkg.

Untuk menginstal paket ini, gunakan perintah 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 - Bangun proyek

Penting

Pastikan bahwa triplet dari paket yang diinstal cocok dengan konfigurasi proyek Anda. Gunakan x64-windows atau x64-windows-static untuk proyek 64-bit dan x86-windows atau x86-windows-static untuk proyek 32-bit Anda.

Dengan integrasi di seluruh sistem diaktifkan, cukup jalankan msbuild untuk membangun proyek:

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.

Langkah Berikutnya

Dalam tutorial ini, Anda menginstal dependensi untuk proyek sederhana menggunakan vcpkg sebagai antarmuka baris perintah.

Berikut adalah beberapa tugas tambahan untuk dicoba berikutnya:

  • Menginstal paket menggunakan file manifes
  • Menginstal paket untuk platform kustom menggunakan triplet
  • Kunci versi Anda untuk build yang dapat diulang menggunakan versi
  • Penggunaan ulang biner dalam seluruh pelaksanaan Integrasi Berkelanjutan menggunakan penembolokan biner
  • Mengelola pustaka privat Anda menggunakan registri kustom