CMake ile Çalışmak #2

C++Yazılım |

CMake yazı dizisinin ilk yazısına buradan ulaşabilirsiniz.

Aşağıdaki gibi örnek bir proje yapısı üzerinden gidelim. Bir matematik kütüphanesine ait proje yapısı:

  • bin
  • build
  • doc
    • CMakeLists.txt
  • include
    • math
      • integral.cpp
      • integral.h
  • lib
  • src
    • math.cpp
    • CMakeLists.txt
  • test
    • integral.h
    • CMakeLists.txt
  • CMakeLists.txt

Ana dizindeki CMakeLists.txt dosyamız ana proje dosyası; src/CMakeLists.txt ve test/CMakeLists.txt ise alt proje dosyalarımız.

Minimal CMake

Öncelikle temel CMakeLists.txt dosyamızı oluşturalım.

# proje adı
project(MathSolver)

# minimum CMake sürümü
cmake_minimum_required(VERSION 2.8)

Seçenekler

CMakeLists.txt dosyamıza çeşitli seçenekler ekleyip bunları kullanabiliriz. Örneğimizde doxygen ile dökümantasyon oluşturulması ve testlerin derlenmesi seçeneklerimiz olsun.

Seçenekler için syntax şu şekildedir: option(ayar_adı "ayarın açıklaması" varsayılan_durum[ON/OFF])

option(BUILD_DOXYGEN "Build documentation" OFF)
option(BUILD_TESTS "Build tests" OFF)

Alt Proje Dizini Oluşturma

Örnekte ana dizindeki CMakeLists.txt dosyasında, alt dizinlerdeki CMakeLists.txt dosyalarını bağımsız şekilde tanıtabiliriz.

add_subdirectory(src)

Mantıksal Operatörler

CMakeLists.txt dosyalarında mantıksal operatörler kullanılabilir. Örneğin yukarıda belirlediğimiz seçeneklere göre alt proje dizinlerini dahil edebiliriz.

if(BUILD_TESTS)
    add_subdirectory(test)
endif(BUILD_TESTS)

if(BUILD_DOXYGEN)
    add_subdirectory(docs)
endif(BUILD_DOXYGEN)

Değişken Atama

CMake ile değişken atamak için set komutunu kullanmamız yeterlidir. Bu komut ile hem CMake'in global değişkenlerini atayabiliriz, hem de yeni değişkenler oluşturup değer atayabiliriz.


# değişken oluşturma & değer atama
set(disable_derivative on)

# global değişkene değer atama (çalışma dizini yolu gösteriliyor)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

Pratik

Görüldüğü gibi CMake derleme işlemlerini organize etmemize, kolaylaştırmamıza yarayan bir araçtır. Tüm bu anlattıklarımızın sonucunda aşağıdaki gibi bir CMakeLists.txt oluşturabiliriz.

# proje adı
project(MathSolver)

# minimum CMake sürümü
cmake_minimum_required(VERSION 2.8)

option(BUILD_DOXYGEN "Build documentation" OFF)
option(BUILD_TESTS "Build tests" OFF)

# değişken oluşturma & değer atama
set(disable_derivative on)

# global değişkene değer atama (çalışma dizini yolu gösteriliyor)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

add_subdirectory(src)

if(BUILD_TESTS)
    add_subdirectory(test)
endif(BUILD_TESTS)

if(BUILD_DOXYGEN)
    add_subdirectory(docs)
endif(BUILD_DOXYGEN)

#3. yazının konuları:

  • toplu kaynak kod işlemleri (regex)
  • include yolları eklemek
  • kütüphaneleri linklemek