CMake - CMake

CMake
Cmake.svg
Clang ekran görüntüsü ile Cmake.png
Geliştirici(ler) Andy Cedilnik, Bill Hoffman, Brad King, Ken Martin, Alexander Neundorf
İlk sürüm 2000 ; 21 yıl önce ( 2000 )
kararlı sürüm
3.21.3  Bunu Vikiveri'de düzenleyin / 20 Eylül 2021 ; 21 gün önce ( 20 Eylül 2021 )
Önizleme sürümü
3.21.0-rc3  Bunu Vikiveri'de düzenleyin / 8 Temmuz 2021 ; 3 ay önce ( 8 Temmuz 2021 )
depo
Yazılmış C , C++
İşletim sistemi Çapraz platform
Tip Yazılım geliştirme araçları
Lisans Yeni BSD
İnternet sitesi cmake .org Bunu Vikiveri'de düzenleyin

Gelen yazılım geliştirme , CKağıt olan çapraz platform ücretsiz ve açık kaynak yazılım için inşa otomasyon , test , ambalaj ve montaj bir kullanarak yazılımın derleyici -bağımsız yöntemi. CMake bir derleme sistemi değildir, bunun yerine başka bir sistemin derleme dosyalarını oluşturur. Birden çok kitaplığa bağlı dizin hiyerarşilerini ve uygulamaları destekler. Make , Qt Creator , Ninja , Android Studio , Apple's Xcode ve Microsoft Visual Studio gibi yerel yapı ortamlarıyla birlikte kullanılır . Minimum bağımlılıkları vardır ve kendi derleme sisteminde yalnızca bir C++ derleyicisi gerektirir .

CMake, izin verilen Yeni BSD lisansı altında açık kaynaklı yazılım olarak dağıtılır .

Tarih

CMake geliştirmesi, Insight Segmentation and Registration Toolkit için platformlar arası bir yapı ortamına duyulan ihtiyaca yanıt olarak 1999'da başladı . Proje, Görünür İnsan Projesi kapsamında Amerika Birleşik Devletleri Ulusal Tıp Kütüphanesi tarafından finanse edilmektedir . Kısmen Ken Martin ve diğer geliştiriciler tarafından Görselleştirme Araç Takımı'nı (VTK) desteklemek için yapılan pcmaker'dan ilham aldı . At kitware Bill Hoffman işlevselliğini taklit çabası, kendi fikirleri ile PcMaKeR bileşenlerini harmanlanmış Unix yapılandırma betikleri . CMake ilk olarak 2000 yılında uygulandı ve 2001 yılında daha da geliştirildi.

Devam eden geliştirme ve iyileştirmeler, VXL Projesi, Brad King tarafından eklenen CABLE özellikleri ve DART'ı desteklemek için GE Kurumsal Ar-Ge dahil olmak üzere geliştiricilerin kendi sistemlerine dahil edilmesiyle desteklendi. VTK, oluşturma ortamı ve ParaView'ü desteklemek için CMake'e geçtiğinde ek özellikler oluşturuldu .

Sürüm 3.0, Haziran 2014'te yayınlandı. "Modern CMake"in başlangıcı olarak tanımlandı. Uzmanlar artık hedefler ve özellikler lehine değişkenlerden kaçınmayı tavsiye ediyor . CMake 2'nin özünde bulunan add_compile_options, include_directories, link_directories, komutları link_librariesartık hedefe özel komutlarla değiştirilmelidir.

Özellikleri

Anahtar bir özellik, (isteğe bağlı olarak) derleyici çıktılarını (nesne dosyaları gibi) kaynak ağacın dışına yerleştirme yeteneğidir. Bu, aynı kaynak ağaçtan ve çapraz derlemeden birden çok derlemeye olanak tanır . Ayrıca kaynak ağacı ayrı tutar ve bir derleme dizininin kaldırılmasının kaynak dosyaları kaldırmamasını sağlar. Kullanıcılar, birincisini kazara kaldırmaktan korunmuyor.

Esnek proje yapısı

CMake, sistem genelinde ve kullanıcı tarafından belirtilen yürütülebilir dosyaları, dosyaları ve kitaplıkları bulabilir. Bu konumlar , hedef derleme dosyalarını oluşturmadan önce özelleştirilebilen bir önbellekte depolanır . Önbellek, CMake ile birlikte gelen bir grafik düzenleyici ile düzenlenebilir.

Karmaşık dizin hiyerarşileri ve birkaç kitaplığa dayanan uygulamalar CMake tarafından iyi bir şekilde desteklenir. Örneğin, CMake, birden çok araç takımına veya her biri birden çok dizine sahip kitaplıklara sahip bir projeyi barındırabilir. Ayrıca, CMake, son uygulama için derlenecek kod oluşturmadan önce yürütülebilir dosyaların oluşturulmasını gerektiren projelerle çalışabilir. Açık kaynaklı, genişletilebilir tasarımı, CMake'in belirli projeler için gerektiği gibi uyarlanmasını sağlar.

IDE yapılandırma desteği

CMake, Microsoft Visual Studio , Xcode ve Eclipse CDT gibi birçok popüler IDE için proje dosyaları oluşturabilir . Ayrıca Windows'ta MSBuild veya NMake için derleme komut dosyaları da üretebilir; Linux , macOS ve Cygwin gibi Unix benzeri platformlarda Unix Make ; ve Ninja hem Windows hem de Unix benzeri platformlarda.

oluşturma süreci

CMake ile bir program veya kitaplık oluşturmak iki aşamalı bir işlemdir. İlk olarak, CMake dilinde yazılmış yapılandırma dosyalarından (CMakeLists.txt) standart derleme dosyaları oluşturulur (oluşturulur) . Ardından, gerçek program oluşturma için platformun yerel oluşturma araçları (yerel araç zinciri) kullanılır.

Yapı dosyaları el jeneratör (örneğin bağlı yapılandırılmış Unix Makefiles için marka ). İleri düzey kullanıcılar ayrıca kendi özel derleyici ve işletim sistemi ihtiyaçlarını desteklemek için ek makefile oluşturucular oluşturabilir ve dahil edebilir. Oluşturulan dosyalar tipik olarak ( cmake's bayrağı kullanılarak) kaynakların (kaynak yapı dışında) dışındaki bir klasöre yerleştirilir , örn build/.

Her inşa projesi , projelerin her (alt) dizininde ( daha önce komutla dahil edilmişti) bir CMakeCache.txtdosya ve CMakeFilesdizin içerir ve add_subdirectory(...)yeniden çalıştırıldığında yeniden oluşturma aşamasını önlemeye veya hızlandırmaya yardımcı olur.

Bir kez Makefile'ında (veya alternatif) oluşturulmuş olup, inşa davranışı ince ayarlı (sürüm 3.1 beri) vasıtasıyla da hedef özellikleri aracılığıyla olabilir CMAKE_...-prefixed global değişkenler. Değişkenler ayrıca CMake'in kendisini yapılandırmak ve ilk varsayılanları ayarlamak için kullanıldığından, ikincisi yalnızca hedef yapılandırmaları için önerilmez.

Derleme hedefi türleri

CMakeLists.txt yapılandırmasına bağlı olarak, derleme dosyaları yürütülebilir dosyalar, kitaplıklar (örneğin libxyz, xyz.dllvb.), nesne dosyası kitaplıkları veya sözde hedefler (takma adlar dahil) olabilir. CMake, dinamik (çalışma zamanı) bağlantıdan kaçınarak ve bunun yerine statik (derleme zamanı) olanı kullanarak yürütülebilir ikili dosyalar/kitaplıklar tarafından bağlanabilen nesne dosyaları üretebilir. Bu, çeşitli optimizasyonların konfigürasyonunda esneklik sağlar.

Yapı bağımlılıkları otomatik olarak belirlenebilir.

Önceden derlenmiş başlıklar

3.6 sürümünden beri CMake kullanarak önceden derlenmiş başlıklar oluşturmak mümkündür .

Dilim

CMakeLists.txt

CMake, nispeten basit yorumlanmış , zorunlu bir betik diline sahiptir. Değişkenleri, dize işleme yöntemlerini, dizileri, işlev/makro bildirimlerini ve modül eklemeyi (içe aktarma) destekler. CMake Language komutları (veya yönergeleri) cmakeadlı bir dosyadan okunur CMakeLists.txt. Bu dosya, cmake'in projenin derleme belirtimine (Makefile gibi) yerleştireceği kaynak dosyaları ve derleme parametrelerini belirtir. Ek olarak, .cmake-suffixed dosyaları cmake tarafından kullanılan komut dosyalarını içerebilir.

Bir projenin derleme dosyalarını oluşturmak cmakeiçin terminalde bir çağrı yapılır ve CMakeLists.txt. Bu dosya biçiminde bir veya daha fazla komut içerir COMMAND(argument ...).

Komut sözdizimi

Komutların argümanları boşlukla ayrılmıştır ve ayrı argüman grupları için anahtar kelimeler içerebilir. Komutlar, örneğin anahtar sözcük olduğu komutunda bir anahtar sözcük alabilir . Kaynak dosyaların listesi ile diğer bazı seçenekler arasında sınırlayıcı görevi görebilir. SET_SOURCE_FILE_PROPERTIES(source_file ... COMPILE_FLAGS compiler_option ...)COMPILE_FLAGS

Cmake'in hedefleri ve bağımlılıklarını (yerel araç zinciri tarafından oluşturulacak) belirtmek için içerdiği ve CMakeLists.txt dosyasının başlangıç ​​noktası olarak hizmet eden komut örnekleri:

  • add_executable(...)- oluşturulacak kaynaklarla (seçilen dile bağlı olarak) yürütülebilir bir ikili hedef bildirir
  • add_library(...) - aynı ama bir kütüphane için
  • target_link_libraries(...) - bağımlılıklar vb. ekler.

JSON dizeleri

Cmake, değerleri JSON -data dizelerinden değişkenlere çıkarmayı destekler (sürüm 3.19'dan beri).

Dahili

Yürütülebilir programlar CMake, CPack ve CTest, C++ programlama dilinde yazılmıştır .

CMake'in işlevselliğinin çoğu, CMake dilinde yazılmış modüllerde uygulanmaktadır .

3.0 sürümünden bu yana, CMake'in belgeleri reStructuredText işaretlemesini kullanır . HTML sayfaları ve kılavuz sayfaları, Sphinx belge oluşturucu tarafından oluşturulur .

Modüller ve Araçlar

CMake çok sayıda .cmakemodül ve araçla birlikte gelir. Bunlar, bağımlılıkları bulma (hem yerleşik hem de harici, örn. FindXYZmodüller), araç zinciri ortamını ve yürütülebilir dosyaları test etme, sürümleri paketleme ( CPackmodül ve cpackkomut) ve harici projelere ( ExternalProjectmodül) bağımlılıkları yönetme gibi işleri kolaylaştırır :

  • ctest — CMakeLists.txt tarafından belirtilen hedef test komutları için kullanılır
  • ccmake ve cmake-gui - yerel yapı sistemine yönelik yapılandırma değişkenlerini ince ayarlar ve günceller
  • cpack - yazılımı paketlemeye yardımcı olur

CPack

CPack , yazılım dağıtımları için bir paketleme sistemidir. CMake ile sıkı bir şekilde entegredir ancak onsuz da çalışabilir.

Şunları oluşturmak için kullanılabilir:

benimseyenler

Açık kaynak

CMake kullanılarak inşa Yazılım içerir: MySQL , Boost (C ++ kütüphaneleri) , KDE / KDE Plasma 5 - Masaüstü Ortamı Linux tabanlı sistemler için KiCAD , FreeCAD , Webkit ve Blender 3D grafik editörü.

Bilimsel araçlar

Tarafından kullanılan yazılım ATLAS deneyinde CMake kullanılarak inşa edilmiştir. Yazılımın kendisi C/C++ ve Python ile yazılmıştır.

Örnekler

Selam Dünya

Aşağıdaki kaynak kod dosyaları, CMake kullanılarak C++ ile yazılmış basit bir merhaba dünya programının nasıl oluşturulacağını gösterir . Kaynak dosyalar bir src/dizine yerleştirilir .

// src/Hello_world.cc
#include <iostream>

int main()
{
    std::cout << "Hello, world!\n";
}
# src/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

# set the project name
project("Hello World")

# specify the executable and corresponding source file
add_executable(hello "Hello_world.cc")

CMake'i bir Linux sisteminde çalıştırmak için bash betiği . Bu örnek, komut dosyasının src/klasörün yanında tutulacağını varsayar :

#!/usr/bin/env bash
# Place this file next to src/ folder

cmake -S src/ -B build/     # Generate configs from the src/ folder into a build/ one
cmake --build build/        # Start building inside the build/ folder
./build/hello               # Run the compiled program.  Outputs "Hello, world!"

Ayrıca bakınız

Referanslar

Dış bağlantılar