CMake Nedir? Kullanımı

C veya C++ ile uygulama geliştririken kullanılan farklı platform ve IDE yapısına göre dosya yapısını oluşturan CMake aracı nedir, nasıl kullanılır ve kullanımı ile ilgili bilgiler yer alıyor.

CMake nedir?

CMake, C veya C++ ile geliştirilen uygulamalar için yazılım derleme otomasyonudur.

Herhangi bir programlama dili ile yazılan kodun çalıştırılabilir olması için derlenmesi gerekir.

Derleme işlemi sırasında derleyiciye uygun parametrelerin eklenmesi, gerekli kütüphanelerin dahil edilmesi, birim testlerin çalıştırılması gibi işlemler yapılır.

Tüm bu işlemler için IDE kullanılabilir ancak IDE ayarları birbirinden farklıdır.

C ve C++ bu işlemler için Make adından bir araca sahiptir.

Ancak bu araç sadece Linux/Unix tabanlı işletim sistemlerinde çalışır.

CMake temel olarak bu işleri platform ve IDE bağımsız bir şekilde yapmak için kullanılan bir araçtır.

Bu araç ile oluşturulan kurallar kod üreteçleri ile farklı IDE’lerde geliştirme yapmaya imkan verir.

CMake kullanımı için öncelikle https://cmake.org/download/ adresinde gerekli kurulum dosyaları temin edilerek kurulması gerekir.

CMake kullanımı

CMake kullanımı için işletim sistemine ait korum yorumlayıcısına cmake yazmak yeterli olacaktır.

Komut çalıştırıldıktan sonra ayaların bulunduğu CMakeLists.txt dosyasını arayacaktır.

Projenin oluşturulması

Geliştirilen ve geliştirilmiş bir proje için CMake ayarlarının yapılması için CMakeLists.txt dosyasının oluşturulması gerekir.

Bu dosya içerisinde aşağıdaki gibi temel ayarlar yer alır.

cmake_minimum_required(VERSION 2.8)
project (projeAdi)
add_executable(merhaba merhabadunya.cpp)

Burada yer alan cmake_minimum_required proje için gerekli olan CMake sürümünü ifade eder.

Alt kısımda yer alan project ifadesi ise projenin adının ifade eder.

En alt kısımda yer alan add_executable ise çalıştırılabilir dosyanın hangi dosyalarla oluşturulacağını ifade eder.

Ayarlar yapıldıktan sonra komut yorumlayıcısına cmake yol biçiminde yazılarak çalıştırıldığında ön tanımlı IDE’ye ait proje ayarı oluşturacaktır.

Özel bir IDE belirlemek için -G parametresi kullanılır.

cmake .. -G "Unix Makefiles"

Komut sonucunda CMake yazılan ayarlara ve işletim sistemine göre uygun Makefile dosyasını proje klasörüne oluşturacaktır.

Üreteç listesini görmek için cmake -G yazmak yeterli olacaktır.

Geliştirilen uygulama birden fazla dosya içeriyorsa add_executable ile bu dosyalar aşağıdaki gibi eklenebilir.

add_executable(merhaba merhabadunya.cpp fonk.cpp fonk.h)

Dosyalar farklı bir klasörde yer alıyorsa include_directories ile de eklenebilir.

Uygulamaya kütüphane eklemek için add_library kullanılır.

add_library(yazdir STATIC yazdir.cpp yazdir.h)

Kütüphanelerin kullanımı biçimine göre SHARED|STATIC|MODULE|OBJECT|UNKNOWN değerleri alır.

Farklı klasörlerde yer alan CMakeLists.txt dosyalarını add_subdirectory ile ana CMakeLists.txt dosyasına ekleyebilirsiniz.

CMake ile değişken tanımlamak için set anahtar kelimesi kullanılır.

Oluşturulan değişkenleri veya önceden tanımlanan değişkenleri kontrol etmek için if anahtar kelimesi ile kontrol edilebilir.

CMake tarafından oluşturulan ön tanımlı değişkenlere şuradan ulaşabilirsiniz.

Örnek bir CMakeLists.txt dosyası aşağıda yer almaktadır.

cmake_minimum_required(VERSION 2.8)

if (CMAKE_VERSION VERSION_LESS "3.1")
  add_definitions(-std=c++11)
else()
  set(CMAKE_CXX_STANDARD 11)
  set(CMAKE_CXX_STANDARD_REQUIRED ON)
  set(CMAKE_CXX_EXTENSIONS OFF)
endif()

project(ShopManagement)

include_directories(include)

set(SOURCES
	main.cpp
	src/Address.cpp
	src/Helper.cpp
	src/Person.cpp
	src/Product.cpp
	src/Shop.cpp
	include/Address.h
	include/Helper.h
	include/Person.h
	include/Product.h
	include/Shop.h
	include/Header.h)

add_executable(ShopManagement ${SOURCES})

install(TARGETS ShopManagement DESTINATION bin)

Örnekte if anahtar kelimesi ile CMAKE_VERSION değişkenin değeri kontrol edilmiş, 3.1 öncesi ise add_definitions ile derleyiciye -std-c++11 parametresi eklenmiş.

Sürüm 3.1 den sonra ise set ile CMAKE_CXX_STANDARD ile CMake tarafından belirlenen değişkenlerin değeri değiştirilmiştir.

Son satırda yer alan install ise derleyici tarafından oluşturulan kodun nereye yazılacağını belirtir.

Kütüphane oluşturmak

CMake ile çalıştırılabilir dosyalar oluşturulabileceği gibi kütüphane de oluşturmaya imkan verir.

Kütüphane oluşturma işlemi çalıştırılabilir dosya işleminde olduğu gibi ilk olarak gerekli dosyalar projeye eklenir.

cmake_minimum_required(VERSION 2.8)
project(kutuphaneAdi)
file(GLOB SOURCES src/*.cpp)
include_directories(include)
add_library(${PROJECT_NAME} SHARED ${SOURCES})

CMake aracı çalıştırıldıktan sonra src klasöründe yer alan cpp uzantılı dosyaları ve include klasöründe yer alan dosyaları proje ekleyecektir.

Proje add_library ile derlenme işlemi yapılır.

Derlenen kütüphane dosyasını sisteme kurmak için install anahtar kelimesi de kullanılabilir.

install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
file(GLOB HEADERS include/*.h)
install(FILES ${HEADERS} DESTINATION include/${PROJECT_NAME})

Oluşturulan kütüphaneyi kullanmak için add_subdirectory ile kütüphane için oluşturulan CMakeLists.txt projeye eklenir.

add_subdirectory(kutuphaneAdi)

Kütüphane proje eklendikten sonra target_link_libraries anahtar kelimesi ile kütüphane projeye bağlanır.

target_link_libraries(projeAdi kutuphaneAdi)

CMake ile C veya C++ içerisinde kullanılacak ön işlemci değişkenleri tanımlayarak daha gelişmiş işlemler yapmamıza da imkan vermektedir.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!