Öğretici: CMake ile paketleri yükleme ve kullanma
Bu öğreticide, kitaplığı CMake ve vcpkg ile kullanan fmt
bir C++ "Merhaba Dünya" programının nasıl oluşturulacağı gösterilmektedir. Bağımlılıkları yükleyecek, basit bir uygulama yapılandıracak, derleyecek ve çalıştıracaksınız.
Önkoşullar
Not
Windows kullanıcıları için Visual Studio'nun MSVC'si (Microsoft Visual C++ Derleyicisi), C++ geliştirme için gerekli derleyicidir.
1 - vcpkg ayarlama
Depoyu kopyalama
İlk adım, vcpkg deposunu GitHub'dan kopyalamaktır. Depo, vcpkg yürütülebilir dosyasını ve vcpkg topluluğu tarafından tutulan seçilmiş açık kaynak kitaplıklarının kayıt defterini almaya yönelik betikler içerir. Bunu yapmak için şunu çalıştırın:
git clone https://github.com/microsoft/vcpkg.git
Vcpkg tarafından seçilen kayıt defteri, 2.000'den fazla açık kaynak kitaplık kümesidir. Bu kitaplıklar vcpkg'nin sürekli tümleştirme işlem hatları tarafından birlikte çalışacak şekilde doğrulanmıştır. vcpkg deposu bu kitaplıkların kaynak kodunu içermese de, bunları derlemek ve sisteminize yüklemek için tarifler ve meta veriler içerir.
Bootstrap betiğini çalıştırma
Artık vcpkg deposunu kopyaladığınıza göre dizine
vcpkg
gidin ve bootstrap betiğini yürütebilirsiniz:cd vcpkg && bootstrap-vcpkg.bat
cd vcpkg; .\bootstrap-vcpkg.bat
cd vcpkg && ./bootstrap-vcpkg.sh
Bootstrap betiği önkoşul denetimleri gerçekleştirir ve vcpkg yürütülebilir dosyasını indirir.
İşte hepsi bu! vcpkg ayarlandı ve kullanıma hazır.
2 - Projeyi ayarlama
Ortam değişkenini
VCPKG_ROOT
yapılandırın.export VCPKG_ROOT=/path/to/vcpkg export PATH=$VCPKG_ROOT:$PATH
Not
komutunu kullanarak
export
ortam değişkenlerini ayarlamak yalnızca geçerli kabuk oturumunu etkiler. Bu değişikliği oturumlar arasında kalıcı hale getirmek için komutunu kabuğunuzun profil betiğine (ör.~/.bashrc
veya~/.zshrc
) ekleyinexport
.set "VCPKG_ROOT=C:\path\to\vcpkg" set PATH=%VCPKG_ROOT%;%PATH%
Not
Ortam değişkenlerini bu şekilde ayarlamak yalnızca geçerli terminal oturumunu etkiler. Bu değişiklikleri tüm oturumlarda kalıcı hale getirmek için Bunları Windows Sistem Ortamı Değişkenleri paneli aracılığıyla ayarlayın.
$env:VCPKG_ROOT = "C:\path\to\vcpkg" $env:PATH = "$env:VCPKG_ROOT;$env:PATH"
Not
Ortam değişkenlerini bu şekilde ayarlamak yalnızca geçerli terminal oturumunu etkiler. Bu değişiklikleri tüm oturumlarda kalıcı hale getirmek için Bunları Windows Sistem Ortamı Değişkenleri paneli aracılığıyla ayarlayın.
Ayar
VCPKG_ROOT
, vcpkg'ye vcpkg örneğinizin nerede olduğunu bildirir. Bunu eklemekPATH
, vcpkg komutlarını doğrudan kabuktan çalıştırabilmenizi sağlar.Proje dizinini oluşturun.
mkdir helloworld && cd helloworld
3 - Bağımlılıkları ve proje dosyalarını ekleme
Bildirim dosyasını oluşturun ve bağımlılığı ekleyin
fmt
.İlk olarak, komutunu dizinin içinden
helloworld
çalıştırarakvcpkg new
projenizin dizininde bir bildirim dosyası (vcpkg.json
) oluşturun:vcpkg new --application
Ardından bağımlılığı ekleyin
fmt
:vcpkg add port fmt
Aşağıdaki
vcpkg.json
gibi görünmelidir:{ "dependencies": [ "fmt" ] }
Bu, bildirim dosyanızdır. vcpkg, hangi bağımlılıkların yükleneceğini öğrenmek için bildirim dosyasını okur ve projenizin gerektirdiği bağımlılıkları sağlamak için CMake ile tümleşir.
Varsayılan
vcpkg-configuration.json
dosya, projenizin kullanması gereken en düşük bağımlılık sürümlerini belirterek temel kısıtlamalar sunar. Bu dosyayı değiştirmek bu öğreticinin kapsamı dışında olsa da, projenizin bağımlılıkları için sürüm kısıtlamaları tanımlamada önemli bir rol oynar. Bu nedenle, bu öğretici için kesinlikle gerekli olmasa da, farklı geliştirme ortamlarında sürüm tutarlılığı sağlamak için kaynak denetiminize eklemenizvcpkg-configuration.json
iyi bir uygulamadır.Proje dosyalarını oluşturun.
Aşağıdaki içeriğe
CMakeLists.txt
sahip dosyayı oluşturun:cmake_minimum_required(VERSION 3.10) project(HelloWorld) find_package(fmt CONFIG REQUIRED) add_executable(HelloWorld helloworld.cpp) target_link_libraries(HelloWorld PRIVATE fmt::fmt)
Şimdi dosyadaki her satırın
CMakeLists.txt
ne yaptığını görelim:cmake_minimum_required(VERSION 3.10)
: Projeyi oluşturmak için gereken en düşük CMake sürümünün 3.10 olduğunu belirtir. Sisteminizde yüklü olan CMake sürümü bundan düşükse bir hata oluşturulur.project(HelloWorld)
: Projenin adını "HelloWorld" olarak ayarlar.find_package(fmt CONFIG REQUIRED)
: CMake yapılandırma dosyasını kullanarak kitaplığı ararfmt
. anahtarREQUIRED
sözcüğü, paket bulunamazsa bir hata oluşturulmasını sağlar.add_executable(HelloWorld helloworld.cpp)
: Kaynak dosyasındanhelloworld.cpp
oluşturulan "HelloWorld" adlı yürütülebilir bir hedef ekler.target_link_libraries(HelloWorld PRIVATE fmt::fmt)
: Yürütülebilir dosyanınHelloWorld
kitaplığa karşıfmt
bağlanması gerektiğini belirtir.PRIVATE
anahtar sözcüğü, yalnızca derlemeHelloWorld
için gerekli olduğunu ve diğer bağımlı projelere yayılmaması gerektiğini belirtirfmt
.
Aşağıdaki içeriğe
helloworld.cpp
sahip dosyayı oluşturun:#include <fmt/core.h> int main() { fmt::print("Hello World!\n"); return 0; }
Bu
helloworld.cpp
dosyada<fmt/core.h>
, üst bilgi kitaplığınıfmt
kullanmak için eklenmiştir. İşlevmain()
daha sonrafmt::print()
konsola "Merhaba Dünya!" iletisinin çıkışını çağırır.
4 - Projeyi derleme ve çalıştırma
CMake yapılandırmasını çalıştırma
CMake, vcpkg'nin özel araç zincirini kullanacak şekilde ayarlandığında vcpkg
CMAKE_TOOLCHAIN_FILE
tarafından yüklenen kitaplıkları otomatik olarak bağlayabilir. Bu, CMake ön ayarları dosyaları kullanılarak derlenebilir.Dizinin içinde
helloworld
aşağıdaki dosyaları oluşturun:CMakePresets.json
{ "version": 2, "configurePresets": [ { "name": "vcpkg", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" } } ] }
CMakeUserPresets.json
{ "version": 2, "configurePresets": [ { "name": "default", "inherits": "vcpkg", "environment": { "VCPKG_ROOT": "<path to vcpkg>" } } ] }
Dosya,
CMakePresets.json
değişkeni ayarlayanCMAKE_TOOLCHAIN_FILE
"vcpkg" adlı tek bir ön ayar içerir. Dosya,CMakeUserPresets.json
ortam değişkeniniVCPKG_ROOT
yerel vcpkg yüklemenizin bulunduğu mutlak yola işaret eder. Sürüm denetim sistemlerinin denetlenmemesiCMakeUserPresets.json
önerilir.Son olarak, CMake kullanarak derlemeyi yapılandırın:
cmake --preset=default
Projeyi derleme
Çalıştır:
cmake --build build
Uygulamayı çalıştırma
Son olarak, uygulamanızın çalıştığını görmek için yürütülebilir dosyayı çalıştırın:
./build/HelloWorld Hello World!
.\build\HelloWorld.exe Hello World!