Skip to content

Latest commit

 

History

History
181 lines (119 loc) · 9.95 KB

CMakeTemelKullanim.md

File metadata and controls

181 lines (119 loc) · 9.95 KB

CMake'in Temel Kullanımı

İçerik Başlığının Üst Görseli

İllüstrasyon Kaynak Bağlantısı

Ön Hazırlık

İlerleyen süreçte gerçekleştirilecek tüm örnekler Ubuntu 22.04 dağıtımına sahip Linux işletim sistemi üzerinde yapılmıştır. Ancak benzer adımları küçük bir araştırmayla istediğiniz işletim sisteminde yürütebilirsiniz.

Kullanım örneğine geçmeden önce, C++ kodlarını derlemek ve çalıştırabilmek için GCC derleyicisini içeren build-essential debian paketi (farklı bir derleyici (Clang vb.) kullanmak isterseniz o derleyiciye ait paket), CMake ile çalışabilmek için ise cmake debian paketine ihtiyacımız var.

sudo apt install build-essential
sudo apt install cmake

Örnek

Temel CMake kullanımını görmek için basit bir C++ kodu yazarak süreci ilerleteceğiz. Herhangi bir metin editörü veya terminal üzerinden aşağıda yer alan dizin yapısını oluşturun.

├── build
├── CMakeLists.txt
└── src
    └── main.cpp

"main.cpp" dosyasına aşağıdaki kodu ekleyin:

#include <iostream>

int main() {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

Kök dizininde önceden oluşturduğumuz "CMakeList.txt" dosyasını düzenleyerek CMake direktiflerini belirtin:

cmake_minimum_required(VERSION 3.22.1)

project(
    CMakeLearn
    VERSION 0.0.1
    DESCRIPTION "CMake Learn Application"
    LANGUAGES CXX
)

add_executable(CMakeLearn src/main.cpp)

Projemizin derlenmesi ve kullanılabilmesi için minimum CMake versiyonunun 3.22.1 olması gerektiğini, projemizin adının CMakeLearn ve versiyonun 0.0.1 olduğunu, projeye dair yürütülebilir dosyanın src altında yer alan main.cpp aracılığıyla oluşturularak CMakeLearn adıyla kaydedilmesini belirlemiş olduk.

İlk kısımda bahsettiğimiz kısıtlama ve bağımlıklar için örnek durum oluşmuş oldu. CMake versiyonunu belirttiğimiz için, başka cihaz veya platformda aynı CMake dosyası kullanılarak proje derlenmeye çalışıldığında versiyon uyumsuzluğu söz konusuysa hata alınacaktır.

Ayrıca aşağıda yer alan satırların "CMakeLists.txt" dosyasına eklenmesi durumunda projenin C++17 standardını desteklediği, derleyicinin g++ olması ve C++17 standardını desteklemesi gerektiğini belirtebiliriz. Eğer required değeri false olarak set edilirse zorunluluk şartı bulunmayacaktır.

set(CMAKE_CXX_XOMPILER g++)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED true)

Şimdilik bu düzenlemeri dışarıda bırakıyoruz. Her şeyimiz hazır. Terminal aracılığıyla build dizine giderek CMake'i çalıştırın. CMake derleme işlemi için gerekli olan dosyaları ve içerikleri belirlediğimiz direktiflere (CMakeLists.txt) göre oluşturacaktır.

cd build/
cmake ..
Build dizini ve CMake Komutu

Bu komutun çıktısını incelediğimizde, CMake'in varsayılan olarak seçili olan Unix Makefiles standartına göre yapılandırma dosyalarını ve içeriklerini GNU/GCC 11.4.0 versiyonuna sahip "/usr/bin/cc" dizininde yer alan derleyicimize uygun olarak build dizini içerisine otomatik olarak oluşturduğunu görebilirsiniz.

Seçili olan makefile standardını aşağıda yer alan komut aracılığıyla kolaylıkla kontrol edebilirsiniz.

cmake --help
CMake Help Komutu

CMake'in oluşturduğu dosya ve içeriklerini inceleyelim.

CMake Komutu Sonucunda Oluşan Dosyalar
CMake Komutu Sonucunda Oluşan Dosyalar

Oluşan dosyaları incelediğimizde derleyici ve işletim sistemine uygun olarak belirtilen direktiflere sahip nesneler, geçici/ara dosyalar ve derleme işlemini gerçekleştireceğimiz Makefile dosyasının elde edildiğini görebiliriz. Bu dosyalar aracılığıyla "make" komutunu kullanarak projeyi derleyebilir ve çalışabilir hale getirebiliriz.

make
Make Komutu

Derleme işlemi tamamlandığında CMakeLists.txt dosyasında belirtilen dizin içerisinde "CMakeLearn" yürütülebilir dosyası oluştu ve çalıştırdığımızda ise "Hello World!" çıktısını elde etmiş olduk!

CMake Kullanarak Farklı Derleyiciler İçin Gerekli Dosyaları Oluşturmak

CMake'in bizlere sağladığı kolaylığı daha iyi anlamak için aynı işlemleri Clang derleyicisine uygun dosya ve içerikleri oluşturmak için gerçekleştireceğiz. Bu işlem için Clang derleyicisine sahip olmanız gerekir.

sudo apt-get install clang

İlk olarak build dizinin temizleyelim. Ardından yeniden Makefile dosyasını oluşturmak için CMake'i kullanalım.

cd build/
rm -rf *
cmake -DCMAKE_C_COMPILER=clang ..
CMake Komutuyla Clang Derleme Dosyalarının Oluşturulması

Cmake komutunun çıktısının incelediğimizde ilk kullanımımızdan farklı olarak compiler olarak Clang 14.0.0 sürümünün, "/usr/bin/clang" dizininden seçildiğini görebilirsiniz. Şimdi make komutunu çalıştırarak, yürütülebilir olarak oluşacak olan "CMakeLearn" dosyamızı elde edelim. Ardından dosyamızı çalıştırarak "Hello, World!" çıktısını alalım.

make
Clang İçin Make Komutu

Farklı derleyiciler için işlem yapmak istediğinizde komut satırı üzerinden parametre geçmek zorunda değilsiniz. Bunun yerine "CMakeLists.txt" dosyasını düzenleyebilir veya terminal üzerinde "CMAKE_GENERATOR" parametresini set edebilirsiniz. Clang için örnek düzenlemeye bu bağlantıdan ulaşabilirsiniz.

CMake Kullanarak Farklı Yapı Sistemi Kurallarına Uygun Dosyaları Oluşturmak

Şu ana kadar kullandığımız tüm örneklerde make komutuna uygun derleme dosyaları oluşturarak kullandık, buna alternatif olarak gömülü vb. projelerde kullanılan "Ninja" için derleme dosyalarını da CMake ile oluşturabilirz.

Bu işlem için Ninja'nın sisteminizde kurulu olması gerekir.

sudo apt-get install ninja-build

İlk olarak build dizinini temizleyelim ve yeniden dosyaları oluşturmak için CMake'i kullanalım.

cd build/
rm -rf *
cmake -GNinja ..
Ninja İçin CMake Komutu

Oluşan dosya çıktılarını incelediğimizde yukarıda yer alan çıktılardan farklı olarak ninja için belirlenmiş dosyalarında oluştuğunu görebiliyoruz. Derleme işlemini ninja komutuyla gerçekleştirelim ve yürütülebilir dosyayı çalıştırarak "Hello, World!" çıktısına alalım.

ninja
Ninja İçin Compile Komutu

Not

Derleme işlemlerinde make ve ninja kullanacağımızın bilgisine sahiptik. Fakat dışarıdan bilmediğiniz bir projeyi derlemek için aşağıdaki yöntemle derleme yapabilirsiniz. Elbette bu işlemi yapabilmeniz için "cmake .." komutunu kullanarak gerekli dosyaları oluşturmuş olmanız gerekiyor.

cd build/
cmake --build .

Örnekler içerisinde birçok kez rm -rf * komutu kullanılıyor. Fakat make ve ninja için help aracılığıyla gerekli komutları öğrenerek cmake --build . ile birlikte kullanabilirsiniz. Örneğin Unix System Files ve make kullanacaksınız;

cmake --build . --target clean
cmake --build . --target all

Kaynakça

< Önceki Sayfaya Dön                      Sonraki Sayfaya İlerle >