Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
vcpkg adalah manajer paket C/C++ sumber terbuka dan gratis yang dikelola oleh Microsoft dan komunitas C++ yang berjalan di Windows, macOS, dan Linux. Ini adalah alat C++ di intinya dan ditulis menggunakan C++ dan skrip CMake. Ini dirancang untuk mengatasi tantangan unik dalam mengelola pustaka C/C++.
Mengapa vcpkg?
- Lebih dari 2300 pustaka sumber terbuka untuk dipilih dalam registri yang dikurasi, dibangun secara rutin untuk memverifikasi kompatibilitas ABI.
- Buat registri pustaka kustom Anda sendiri dengan paket pustaka kustom Anda sendiri
- Pengalaman lintas platform yang konsisten untuk Windows, macOS, dan Linux
- Tambahkan pustaka dengan mudah ke proyek Anda dengan sistem proyek dan build apa pun
- Membangun dependensi dari sumber kode atau mengunduh biner yang sudah terverifikasi ABI dan siap digunakan, dengan lebih dari 70 konfigurasi yang tersedia secara default, serta kustomisasi tak terbatas untuk persyaratan spesifik Anda
- Mencegah konflik versi dan masalah struktur hierarki berlian di antara dependensi Anda dengan desain penentuan versi unik
- Untuk pengguna MSBuild dan CMake: integrasi otomatis dengan lingkungan build Anda untuk pengalaman akuisisi dependensi yang mulus
- Dipercaya oleh siswa, pengembang sumber terbuka, hobi, dan pro, termasuk beberapa perusahaan terbesar
Fitur vcpkg
Port dan kembar tiga
Port vcpkg adalah resep build versi yang menghasilkan paket. Jenis paket yang paling umum adalah pustaka C/C++ yang terdiri dari header, kode sumber, dan biner.
Triplet menangkap lingkungan build target (cpu, os, compiler, runtime, dll.) dengan satu nama yang praktis. vcpkg menyediakan lebih dari 70 triplet secara default, tetapi Anda juga dapat menentukan sendiri.
Untuk menginstal paket pada sistem Anda, vcpkg menjalankan file resep port, yang merupakan skrip CMake. Skrip mungkin berisi langkah-langkah untuk mengunduh kode sumber atau menjalankan build pada sistem Anda. Selama build, vcpkg menggunakan informasi dalam triplet Anda untuk memastikan bahwa paket yang dihasilkan cocok dengan konfigurasi yang Anda inginkan.
Penembolokan biner
Meskipun vcpkg membangun pustaka dari sumber kapan pun diperlukan, Anda dapat mencadangkan paket bawaan Anda dalam cache biner . Ini memungkinkan mesin pengembang lain atau eksekusi integrasi berkelanjutan untuk mereferensikan paket bawaan ini tanpa menjalankan build baru setiap saat. vcpkg menentukan apakah pembangunan ulang diperlukan dengan memeriksa apakah cache sudah berisi paket yang ada yang valid dengan biner yang sesuai.
Memanifestasikan
Anda dapat mendeklarasikan dependensi langsung Anda dan menambahkan fitur opsional atau batasan versi dalam file manifes . File manifes dapat diperiksa ke sistem kontrol sumber Anda dan dibagikan dengan tim Anda.
Pembuatan versi
vcpkg memiliki cara unik untuk menangani versi paket . File manifes Anda dapat mereferensikan satu versi dasar yang ditetapkan secara default. Dasar memberi Anda manajemen dependensi bebas konflik dan bebas repot dengan reproduktabilitas penuh. Selain itu, Anda masih dapat memiliki kontrol yang lebih canggih dengan mengunci versi paket individual.
Registri
Registri adalah kumpulan port dan versi yang tersedia yang dapat diinstal pengguna vcpkg. vcpkg menyediakan registri pustaka sumber terbuka yang dikumpulkan secara default. Anda juga dapat membuat registri Anda sendiri untuk kustomisasi, patch, atau pustaka privat.
Penyimpanan sementara aset
Pencaching Aset memungkinkan vcpkg untuk bekerja di lingkungan terisolasi dan offline, memastikan kelangsungan bisnis bahkan jika host jarak jauh tidak berfungsi atau disusupi. Ini menggunakan download-mirror untuk mengunggah dan memulihkan aset seperti kode sumber dan alat build.
vcpkg dibandingkan dengan manajer paket lainnya
vcpkg dibandingkan dengan NuGet
NuGet adalah manajer paket .NET yang sering digunakan untuk pengembangan C/C++, terutama untuk solusi MSBuild yang berisi proyek .NET. Sebagai aturan umum, tim Microsoft C++ tidak merekomendasikan penggunaan NuGet untuk pengembangan C/C++ karena NuGet memiliki beberapa batasan:
- Varian kompilasi. Karena NuGet tidak dapat membangun paket dari sumber dengan cepat, perlu menyediakan biner bawaan untuk mencocokkan semua kemungkinan pembatasan Application Binary Interface (ABI) untuk semua pengguna. Pengguna bertanggung jawab untuk membangun paket dengan benar. Sulit juga membedakan antara biner karena kurangnya metadata yang relevan. Ini menghasilkan pengguna yang menempatkan arsitektur, sistem operasi, dan informasi kompilator dalam nama paket. Ini tidak diinginkan karena batasan pada arsitektur, OS, dan informasi kompilator tidak dapat diberlakukan selama akuisisi paket.
- Biner versus sumber. NuGet dirancang dari awal untuk menyediakan biner yang relatif kecil dan sudah dibangun sebelumnya. Pengembang harus memiliki akses ke kode sumber untuk memastikan kompatibilitas, performa, integritas, dan debuggability ABI.
-
Tidak Ada Dukungan NuGet PackageReference. NuGet PackageReference tidak didukung untuk file
.vcxprojdan tidak ada rencana untuk menambahkannya di masa mendatang karena perbedaan teknis dan arsitektur antara proyek C++ dan .NET MSBuild. Ini berarti pengguna NuGet C++ tidak akan mendapat manfaat dari fitur seperti penggunaan cache global dan mereferensikan dependensi dalam istilah MSBuild sederhana dengan akses ke logika kondisional. - pelacakan ABI Transitif . vcpkg membangun kembali dependensi sumber terbuka yang terpengaruh oleh perubahan dalam paket tertentu. Misalnya, jika pembaruan baru dirilis untuk Boost, vcpkg akan membangun ulang semua dependensi untuk Boost dan perpustakaan yang bergantung padanya, untuk memastikan semuanya masih berfungsi. Permintaan pull untuk memperbarui pustaka di repositori vcpkg tidak digabungkan sampai konflik waktu build ditangani.
vcpkg dibandingkan dengan manajer paket sistem
Ada berbagai manajer paket sistem untuk Linux, macOS, dan Windows yang dapat digunakan untuk memperoleh dan mengelola pustaka C/C++. Manajer paket ini biasanya merupakan pilihan yang sangat baik untuk mengelola aplikasi. Tetapi karena sifat generik dukungan mereka, mereka sering gagal memberikan fitur yang bermanfaat terutama untuk pengembang C/C++. Meskipun jarak tempuh Anda akan bervariasi, dan beberapa manajer paket sistem memberikan beberapa fitur ini, tidak ada yang memiliki semua hal berikut:
- Aset pengembang redistributable: vcpkg dapat memperoleh aset pengembang yang dapat didistribusikan ulang untuk membantu debugging.
- Paket bawaan vs. build dari sumber: vcpkg dapat membangun paket dari sumber berdasarkan persyaratan kustom Anda. Tidak perlu berurusan dengan paket bawaan yang telah dikompilasi sebelumnya untuk membuatnya berfungsi.
- versi katalog keseluruhan: vcpkg memungkinkan Anda bergantung pada kumpulan versi paket yang saling kompatibel, tanpa perlu mengelola versi paket individual. Anda masih dapat melakukannya sesuai kebutuhan, tetapi pengalaman default dirancang agar mudah untuk memulai.
- Beberapa salinan pustaka yang sama pada satu sistem: Anda dapat memiliki beberapa salinan dependensi yang sama yang diinstal pada sistem yang sama dengan vcpkg, sedangkan manajer paket sistem dapat menginstal satu versi ke satu lokasi di seluruh sistem. Ini mempersulit hal-hal ketika Anda memiliki beberapa proyek tergantung pada versi pustaka yang berbeda.
- Ukuran katalog: Karena vcpkg dikhususkan untuk C/C++, ia memiliki koleksi pustaka C/C++ yang sangat besar dibandingkan dengan manajer paket sistem, dan secara aktif dipertahankan. Secara umum, Anda lebih mungkin menemukan pustaka yang berguna dan terbaru untuk pengembangan C++.
- dukungan lintas platform: Manajer paket sistem menyediakan paket yang dikunci ke sistem tertentu. Jika Anda perlu menargetkan lebih dari satu varian sistem operasi, Anda harus menemukan manajer paket yang berbeda untuk sistem kedua. Sebaliknya, vcpkg adalah manajer paket lintas platform. Jadi, Anda hanya perlu menyesuaikan target build Anda.
Ada situasi di mana manajer paket sistem benar-benar masuk akal:
- Manajer paket sistem cenderung melakukan pekerjaan yang baik untuk menyediakan dan memelihara pustaka khusus untuk sistem tersebut
- Paket yang sudah disediakan sebelumnya seharusnya dapat langsung berfungsi pada sistem tersebut jika proyek yang Anda gunakan memiliki konfigurasi build yang sederhana.
- Jika Anda tidak berniat melakukan pengembangan lintas platform, Anda tidak akan mengalami masalah kompatibilitas sistem operasi dengan manajer paket sistem.
vcpkg dirancang untuk bekerja berdampingan dengan manajer paket sistem, jadi jangan ragu untuk menggunakan alat yang paling masuk akal bagi Anda untuk setiap dependensi.
Mulai menggunakan vcpkg
Untuk mencoba vcpkg, lihat tutorial pengantar kami:
- Menginstal dan menggunakan paket dengan CMake
- Menginstal dan menggunakan paket dengan CMake di Visual Studio
- Menginstal dan menggunakan paket dengan MSBuild di Visual Studio
- Menginstal dan menggunakan paket dengan CMake di Visual Studio Code
- Mengemas perpustakaan dengan vcpkg
- Menambahkan port ke registri yang dikelola dengan baik vcpkg
Jika sistem build Anda bukan CMake atau MSBuild, vcpkg juga mendukung integrasi manual dengan lingkungan pilihan Anda.