CMake C++ program meydana getirme sürecini işletim sistemiyle birlikte arka planda kullanılacak olan derleyici dışında kalan bu derleyiciden özgür bir tarzda gerçekleştirilmesine imkân sağlayan açık kaynaklı bir program olarak ifade edilebilir fakat burada önemli olan şey CMake’in bunu nasıl gerçekleştirdiği. CMake, özel bir şekilde geliştirilen bir betik dile ve meydana getirme işleminin gerçekleştirilebileceği dizilerin her birine konan CMakeLists.txt dosyalarının da kullanıldığı bütün platformlara gereken olan oluşturma dosyalarını ortaya çıkarıyor.
Cmake ile Neler Yapılabilir?
İlk olarak bahsedilmesi gerekirse Cmake aracılığıyla Statik ya da dinamik kütüphanelerin oluşturulması amacıyla lazım olan dosyalar oluşturulabilir. Sonra çalıştırılabilmesi mümkün olan kodların meydana getirilmesi amacıyla gereken dosyalar meydana getirilebilir. Üretimi yapılacak olan kütüphane olsun çalıştırılabilir kodlar olsun bunlar için gereken ayarları birbirlerine karşı oldukları bağımlılıkları ile tanımlamak mümkün. Bunlardan daha elzem olan kısım ise kurulumun her bir aşaması için kuruluma özel şekilde ya da diğer istisnai alternatif ve ayarlamalar ile kurulum aşamasında kullanıcıya sunulabilmesinin olanak sağlanmış oluyor. Tek kaynak ağacı olarak adlandırılan ve genellikle “source tree” olarak bilinen ve üzerinden birden fazla yapılandırma için bu durumların meydana getirilmesine olanak veriyor.
Ek olarak hepsi olmamakla beraber bazı ara dosyalar da oluşturarak geliştirilen bu CMake kodlarını da herhangi bir grafiksel kullanıcı ara yüzü vasıtasıyla kullanılmasına katkı sağlıyor ve birden daha fazla olan ve kompleks dizinleri içerisinde barındıran kaynak kodlarının derlenmesinin de daha kolay bir şekilde yapılmasının önü açılıyor. Kurulum işlerinin tümü sadece tek bir dosyaya toplamak açısından daha düzenli bir yaklaşımı da gözler önüne seriyor. CMake kullanılarak birçok IDE için gereken dosyalar da (Mesela: MS Visual, Eclipse CDT,Studio, XCode), meydana getirme betikleri (Mesela Windows için MSBuild ya da NMake betikleri, Unix yapılı sistemler için ise “makefile”) oluşturulabilir.
CMake aracılığıyla yazılım yaratma zaman dilimi iki bölümde oluyor. İlk olarak yapılandırma dosyalarından optimal kurulum dosyalarının oluşumu tamamlanıyor ve daha sonra bu dosyalar bu platformla alakalı kurulum araçlarının da kullanılmasıyla bir yazılım oluşturuluyor. Tam da bu noktada oluşturma programı kontrolünü sağlayan dosya, kuruluma dahil olmuş olan bütün her bir dizin alanına konulan CMakeLists.txt, dosyası olsa da bu dosya sınırlarında yer alan her bir komut aracılığıyla bu süreç oluşuyor. Birçok açık ve hızlı kaynak proje yazılım günümüzde CMake kullanımına başladı.
Takım Hususları
CMake betiği yazılıyorken yorumların eklenmesi için # kullanılabilir. Meydana getirme dosyalarına dahil edilecek her bir dizin içinde mutlaka CMakeLists.txt dosyası bulunmalı. CMake betikleri komutlar aracılığıyla oluşturulduğu göz önünde bulundurulmalı. Bu komutların her biri liste olarak bazı parametreler barındırıyor.
Ayrıntılı komutlar için ise https://cmake.org/cmake/help/latest/manual/cmake-commands.7.html sayfasına erişebilir. Örneklendirmelerle de bu komutlar açıklanacak olunsa da en çok kullanılacak olan komutlara kısaca değinilebilir. Message alanını girilen mesajı gösteriyor, cmake_minimum_required gerekli minimum CMake sürümü belirtiyor. Diğerleri de Add_executable ise verilen ad ile çalıştırılabilir amaçlanan uygulamayı ekliyor, add_library firilen ad vasıtasıyla hedef kütüphanenin oluşması sağlanıyor, add_subdirectory alt dizin kurulum aşamasına ekleniyor diyerek açıklanabilir.
Bu oluşumların yanında da süreç sırasında türlü türlü mantıkları göstermek adına (koşul, döngü gibi komutlar da yer alıyor. Bunlar saptanan çiftler şeklinde kullanılıyor. Bunlar if ve endif, elif ve endif, while ve endwhile, foreach ve endforeach list, return, set olarak ifade edilebilir.
CMake betikleri sınırlarında değişkenler tanımlanabilir. Bu değişkenler alfanumerik ve yalnızca “_” şeklinde kullanılabilir. Daha sonraki aşamalarda ise bu değişkenlere ulaşmak amacıyla da “${DEGISKEN_ISMI}” kullanımın takibi yapılmalı. Kolay bir şekilde bir değişkenin tanımlamasının yapılabilmesi amacıyla referans alınacak birçok örnek de mevcut.
Kullanıcı aracılığıyla tanımı yapılan değişkenler de bunların yanında bazı “predefined” kısacası daha önceden tanımı yapılmış değişkenler de bulunuyor. Bunlardan en elzemlerinin açıklamaları CMAKE_BINARY_DIR meydana getirme ağacının tepesi ve çıktının yer alacağı dizin,CMAKE_HOME_DIRECTORY kaynak ağacının dizini, CMAKE_SOURCE_DIR kaynak ağacına yapılmış olan tam dizin, CMAKE_INCLUDE_PATH find_file ve find_path komutları vasıtasıyla araştırması yapılan dizinler olarak açıklanması mümkün. Direktifler büyük/küçük harf duyarlılığı olmayan ama değişkenler büyük/küçük harf duyarlı olarak çalışıyor. CMake’in en kayda değer niteliklerinden birisi de birbirinden farklı platformlar için meydana getirme sürecini sunuyor oluşu. Tam da bu aşamada sağlanan değişkenlere de göz atılabilir.
CMAKE_SYSTEM, tam sistem adları örneğin “FreeBSD-5.4-RELEASE”, “Linux-2.4.22”, “Windows 5.1” olarak CMAKE_SYSTEM_NAME Meydana getirme aşamasıyla amaçlanan sistem ismi olarak, Ana değerler “Windows”, “Darwin”, “Android”, “FreeBSD” ve “Linux” şeklinde isimlendiriliyor. Ayrıca diğer gömülü sistemlerin de isimlendirilmesi “Generic” olarak yapılıyor. Diğer yapılardan bahsedilecek olursa da diğer yapılardan
İşletim sistemi sürümü olarak CMAKE_SYSTEM_VERSION, İşlemci ismi (ör. “Intel(R) Pentium(R) M processor 2.00GHz”) olarak CMAKE_SYSTEM_PROCESSOR ve son olarak da Kurulum oluşturulan ev sahibi sistemi olarak da CMAKE_HOST_SYSTEM_NAME yazılabilir. Görüldüğü gibi de bu değişkenler kullanılarak meydana getirme dosyaları rahatlıkça uyarlanabilir.
Birinci Örnek
İlk satır bölmesinde yer alan ve bu dosyayı oluşturmak için lazım olacak minimum sürüm numarasının tanımı yapılıyor. Bu numaraların büyütülerek zıt durumlarda ne olduğu görülebilir de.
İkinci satırda bulunan “project()” ise komutuyla beraber bahsedilen projeye bir ad verilmiş oluyor. Bunun ne anlama geldiği konusunda da birçok soru işareti oluşabilir. Bu soru işaretlerini de gidermek amacıyla hemen https://cmake.org/cmake/help/latest/command/project.html adresine göz atılabilir. Bu adres aracılığıyla da daha çok ayrıntılı sağlam bilgiler almak mümkün ve temel manada bu komut aracılığıyla oluşturulacak bütün yazılıma bir ad verilebilir. Sürüm, dil ya da daha ayrıntılı bir açıklama vb. teknik bilgilerin yer aldığı atamalar da yapılabilir.
Üçüncü olan ve noktada son komut olarak kabul edilen “add_executable” komutundan bahsedilebilir. Bu komut sayesinde kendisine verilecek olan parametreler vasıtasıyla çalıştırılabilmesi yüksek olan kod üretilmesi ile alakalı meydana getirme dosyalarında komutların ayarlaması yapılıyor. Parametrelerden ilki çalışabilir kodun adı ikincisi kullanılması muhtemel olan kaynak kod olarak ifade edilebilir. Bu noktada da çok ince bir çizgi bulunuyor. Birçoğu diğer kaynaklar arasında yer alan ve burada yalnızca .cpp dosyalarının eklenmiş olduğu görülebilir ve sahiden de derleme amacıyla cpp dosyasının verilmesinin yeterli olduğu biliniyor. Bu aşamada “header” dosyasının bilhassa eklenmesinin nedeni VS benzeri IDE’lerde bulunan ve bu dosyaların bizlere katılmasıyla, sunumunun yapılması olarak açıklanabilir. “header” dosyalarının umursanmadığı durumlarda ise o dosyaların eklenmemesi durumunda meydana getirme işlemi sorunsuz bir şekilde başarıyla sonuçlanabilir.