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:
- Teruskan opsi
--x-feature
ke perintahvpckg install
Anda. - Di CMake, atur
VCPKG_MANIFEST_FEATURES
sebelum panggilan pertama keproject()
. - Pada MSBuild, lewatkan opsi
--x-feature
melalui `VcpkgAdditionalInstallOptions`.
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 referensivcpkg-configuration.json
. - Mengunci versi Anda untuk build yang dapat diulang menggunakan penerapan versi