Bagikan melalui


Apa itu mode manifes?

vcpkg memiliki dua mode operasi: mode klasik dan mode manifes. Untuk sebagian besar pengguna, kami merekomendasikan mode manifesto.

Mode manifes menggunakan file JSON deklaratif untuk menjelaskan metadata tentang proyek atau paket Anda. File manifes diperlukan untuk memiliki nama vcpkg.json.

Mode manifes diaktifkan dengan menjalankan perintah vcpkg install ketika terdapat file manifes (vcpkg.json) di direktori kerja. Baca lebih lanjut untuk detail tentang cara menginstal paket dalam mode manifes.

Mode manifes juga diperlukan untuk menggunakan fitur tingkat lanjut seperti penerapan versi dan registri kustom.

File manifes dalam port

Semua port vcpkg harus menyertakan file vcpkg.json yang menjelaskan metadata tentang paket yang mereka instal.

vcpkg menggunakan metadata dalam manifes paket untuk berbagai tujuan, seperti, menghitung pohon dependensi, mencari paket berdasarkan nama atau deskripsi, menyelesaikan fitur, dll.

Contoh daftar paket

{
  "name": "fmt",
  "version": "10.1.1",
  "description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
  "homepage": "https://github.com/fmtlib/fmt",
  "license": "MIT",
  "dependencies": [
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

Berkas manifest di proyek

Tujuan utama menggunakan file manifes dalam proyek Anda adalah untuk mendeklarasikan dependensi Anda. Saat menggunakan manifes proyek, Anda dapat menentukan batasan dan penggantian versi untuk memastikan versi dependensi tertentu tetap terkunci. Fitur ini tidak tersedia dalam mode klasik.

Contoh manifes proyek

{
  "dependencies": [ "fmt", "zlib" ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "zlib", "version": "1.2.8" }
  ]
}

File konfigurasi

vcpkg dapat dikonfigurasi melalui file vcpkg-configuration.json untuk menambahkan lebih banyak registri paket atau port overlay dan lokasi triplet.

Contoh file konfigurasi

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/microsoft/vcpkg-docs",
      "reference": "vcpkg-registry",
      "baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
      "packages": [ "beicode", "beison" ]
    }
  ],
  "overlay-ports": [
    "C:\\dev\\my_vcpkg_ports"
  ]
}

Menginstal paket dalam mode manifes

Untuk menginstal paket menggunakan file manifes, Anda menggunakan perintah vcpkg install tanpa argumen paket apa pun. Perintah harus dijalankan dari direktori yang berisi file manifes (vcpkg.json), atau jalur ke file manifes yang disediakan dengan menggunakan opsi --x-manifest-root=<path>.

Paket yang diinstal dalam mode manifes tidak akan diinstal di direktori installed global seperti yang mereka lakukan dalam mode klasik. Sebaliknya, setiap manifes mendapatkan direktori penginstalannya sendiri bernama vcpkg_installed; direktori vcpkg_installed dibuat di direktori yang sama yang berisi file manifes.

Memiliki pohon instalasi independen untuk setiap manifes memungkinkan pemisahan dependensi antara proyek yang berbeda. Ini menghindari batasan penting mode klasik, yang hanya memungkinkan satu versi setiap port diinstal. Mode manifest memisahkan versi-versi port untuk setiap proyek.

Menggunakan fitur dalam manifes proyek

File manifes dapat menentukan serangkaian fungsionalitas, perilaku, dan dependensi aditif melalui penggunaan "fitur".

Dalam proyek, Anda dapat menentukan fitur untuk mengaktifkan atau menonaktifkan dependensi yang berlaku untuk bagian proyek Anda. Misalnya, jika proyek Anda berisi beberapa komponen, Anda mungkin ingin menyimpan dependensi umum dalam daftar "dependencies" tetapi membatasi beberapa komponen lainnya ke komponen masing-masing.

Untuk mengaktifkan fitur proyek, Anda dapat menggunakan salah satu metode berikut:

Contoh: Fitur dalam manifes proyek

{
  "name": "my-game",
  "dependencies": [ "grpc" ],
  "features": {
    "client": {
      "description": "client game executable",
      "dependencies": [ "sdl2", "bullet3" ]
    },
    "server": {
      "description": "multiplayer server executable",
      "dependencies": [ "proxygen" ]
    },
    "tests": {
      "description": "development tests",
      "dependencies": [ "gtest" ]
    }
  }
}

Untuk membangun hanya dependensi komponen "klien", jalankan:

vcpkg install --x-feature=client

Langkah berikutnya

Berikut adalah beberapa tugas untuk dicoba berikutnya:

  • Selesaikan tutorial mode manifest
  • Membaca vcpkg.json dan Artikel referensi vcpkg-configuration.json.
  • Mengunci versi Anda untuk build yang dapat diulang menggunakan penerapan versi