CMake Nedir? Kullanımı

Geliştirilen C ve C++ uygulamalarını farklı IDE dosya yapısına göre oluşturmaya imkan veren 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.

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 CMake için gerekli olan sürümü,

project proje adını,

add_executable ise hangi dosyaların derleneceğini ve çıktı sonucu oluşacak dosyayı 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.

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!