cmkr: daha temiz C++ derlemeleri için deklaratif CMake oluşturma
Tek bir cmake.toml yazarak standart CMake projeleri, hedefler ve bağımlılıklar içeren deklaratif bir yapı akışını deneyimleyin. Duncan Ogilvie, CMake'i Cargo benzeri bir TOML manifestosuyla sarmak için bir yardımcı araç olarak cmkr'yi oluşturdu, CMake uyumluluğunu korurken gereksiz kodu azaltıyor. Ana yetenekler arasında TOML yapılandırması, otomatik CMakeLists.txt oluşturma, FetchContent ve vcpkg entegrasyonu ve CI için kendini başlatma bulunuyor; daha az manuel CMake betiği isteyen geliştiriciler en fazla faydayı elde ediyor.
cmkr pratikte ne yapar?
cmkr, insan tarafından okunabilir bir cmake.toml dosyasını okur ve otomatik olarak idiomatik CMakeLists.txt dosyaları üretir. Araç, proje meta verilerini, birden fazla hedef tanımını (yürütülebilir dosyalar, statik ve paylaşılan kütüphaneler), koşullu mantığı ve platforma özgü seçenekleri TOML formatında kabul eder, ardından herhangi bir CMake uyumlu IDE veya yapı adımının tüketebileceği standart CMake'i üretir. Bu, her proje için tek bir deklaratif manifest ile elle yazılmış CMake betiklerinin yerini alır.
CI ve paylaşılan projelerde nasıl davranır?
cmkr, kendini başlatma (self-bootstrapping) sunar, böylece bir depo üretilen dosyaları ve aşağı akışta inşaatçıların yalnızca standart CMake ve bir C++ derleyicisi ile çalışmasına izin veren bir başlatma betiğini içerebilir. Bu tasarım, CI boru hatlarının cmkr önceden yüklenmesine ihtiyaç duymadığı anlamına gelir; üretilen CMake, otomatik yapıların kanonik girişi olmaya devam eder, bu da proje paylaşımını ve mevcut CI iş akışlarıyla entegrasyonu basit hale getirir.
cmkr güvenli mi ve öğrenme eğrisi ne kadar dik?
Araç, standart CMakeLists.txt üreterek CMake uyumluluğunu korur, bu nedenle inşa zamanında CMake'in yerini almaz. Koşullu mantık ve platforma özgü kurallar TOML'da bulunur, bu da cmkr'nin deklaratif girişlerden CMake yapısına olan eşlemesini öğrenmeyi gerektirir. Geliştiricinin C++ araçlarıyla olan geçmişi ve CMake ile önceki deneyimi, öğrenme süresini azaltır; acemiler daha az ayrıntılı yapılandırmadan faydalanır ancak manifest şemasını öğrenmelidir.
Declaratif yapı meta verisi isteyen C++ ekipleri için net bir seçim
cmkr, birden fazla CMake betiği sürdürmek yerine tek bir TOML manifestosu yazmayı tercih eden geliştiricilere uygundur; projeleri mevcut CMake araçları ve IDE'leri ile uyumlu tutarken, depo başlatmayı mümkün kılar. Ana takas, ek soyutlama katmanıdır: ekipler, CMake kavramlarını deklaratif şemaya eşlemek zorundadır, bu da zaman tasarrufları görünmeden önce başlangıçta bir öğrenme adımı ekler.