CMake by Example

Mirko Kiefer
Feb 22, 2017 · 4 min read

div>

yrittäessäni oppia cmakea en löytänyt mitään hyvää esittelyä. CMake-dokumentaatio on varsin kattava, mutta ei sovellu aloittelijalle. CMake-wikiin on linkitetty joitakin hyödyllisiä opetusohjelmia, mutta useimmat niistä kattavat vain hyvin erityisiä ongelmia tai ovat liian yksinkertaisia. Joten kirjoitin tämän lyhyen CMake-johdannon tislattuna versiona siitä, mitä sain selville työstettyäni dokumentteja ja seurattuani stackoverflow-kysymyksiä.

Its a work in progress and I will try to continuously improve it.

CMake on meta-rakentamistyökalu, jolla voi luoda natiiveja rakentavia skriptejä useille eri alustoille:

  • Unix Makefiles
  • code

  • Visual Studio
  • Eclipse
  • ja lisää…

Katso koko lista CMake-generaattoreista.

Oletetaan, että meillä on yksinkertainen sovellus, jossa on yksi.C-tiedosto.

me luomalla CMakeLists.txt tiedoston projektimme juureen.

cmake_minimum_required(VERSION 2.8)project(app_project)add_executable(myapp main.c)install(TARGETS myapp DESTINATION bin)

thats all we need to be able to build our app with any of the available generators.

add_executable määrittelee binäärimme kaikilla linkitetyillä lähdetiedostoilla.

install käskee cmakea asentamaan binäärimme bin asennushakemiston hakemistoon.

Building

CMake tukee lähdekoodin ulkopuolisia rakennelmia-joten kaikki koottu koodimme menee lähteille erilliseen hakemistoon.

rakentamisen aloittamiseksi luomme uuden kansion:

mkdir _build
cd _build

ja soitamme cmakelle polun projektin juureen (tässä tapauksessa yläkansio):

cmake ..

tämä luo rakentamiskomentoja oletusgeneraattorin avulla — Linux / OSX: ssä tämän pitäisi olla Makefiles.

oletuksena cmake asentaa build-versiomme järjestelmähakemistoihin.
muokatun asennushakemiston määrittelemiseksi annamme sen yksinkertaisesti cmakelle:

cmake .. -DCMAKE_INSTALL_PREFIX=../_install

rakentamiskomentosarjan suorittamiseen voit käyttää Makefileä:

make
make install

voimme nyt ajaa binäärimme asennushakemistosta:

../_install/bin/myapp

jos halusimme käyttää eri generaattoria, siirrämme sen cmakelle käyttäen -G parametri:

cmake .. -GXcode

Tämä tulostaa helposti konfiguroidun Xcode-projektin sovelluksen rakentamiseksi.

käyttämällä Cmakea kirjastojen kanssa

kirjaston rakentamiseen käytämme samanlaista komentojonoa:

cmake_minimum_required(VERSION 2.8)project(libtest_project)add_library(test STATIC test.c)install(TARGETS test DESTINATION lib)
install(FILES test.h DESTINATION include)

CMake rakentaa kirjaston nimellä libtest.a ja asentaa sen asennushakemiston lib-kansioon.
sisällytämme myös julkisen otsikkotiedostomme asennusvaiheeseen ja käskemme cmakea laittamaan sen include.

staattisen kirjaston sijaan voimme rakentaa myös jaetun lib:

add_library(test SHARED test.c)

linkittämällä kirjastot suoritettaviin cmake

voimme laajentaa suoritettavaa ohjelmaamme ylhäältä linkittämällä sen libray libtest.a.

aloitetaan lisäämällä kirjaston Hakemisto alihakemistoksi MyApp-projektiimme.

nyt voidaan käyttää Cmakelistoilla määriteltyä kirjastoa.libtest_projektin txt myappin Cmakelistoissa.txt:

cmake_minimum_required(VERSION 2.8)project(myapp)add_subdirectory(libtest_project)add_executable(myapp main.c)target_link_libraries(myapp test)install(TARGETS myapp DESTINATION bin)

add_subdirectory antaa libtestprojektilla määritellyn kirjaston test koottavaksi.
In target_link_libraries käskemme Cmakea linkittämään sen suoritustiedostoomme. CMake varmistaa ensin rakentaa testi ennen kuin yhdistää sen myapp.

mukaan lukien muita rakentamisjärjestelmiä käyttävät ulkopuoliset kirjastot

vaikka CMake nauttii kasvavasta mielenkiinnosta, on vielä paljon kirjastoja, jotka käyttävät natiiveja rakentamisjärjestelmiä kuten Unix Makefiles. Voit käyttää niitä CMake-projektissasi ilman, että sinun tarvitsee kirjoittaa uudelleen niiden rakentamiskäsikirjoituksia.

tarvitaan vain Cmaken tuki ulkoisille projekteille ja tuoduille kirjastoille:

ExternalProject_Add(project_luajit
URL http://luajit.org/download/LuaJIT-2.0.1.tar.gz
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
CONFIGURE_COMMAND ""
BUILD_COMMAND make
INSTALL_COMMAND make install
PREFIX=${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
)ExternalProject_Get_Property(project_luajit install_dir)add_library(luajit STATIC IMPORTED)set_property(TARGET luajit PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libluajit-5.1.a)add_dependencies(luajit project_luajit)add_executable(myapp main.c)include_directories(${install_dir}/include/luajit-2.0)target_link_libraries(myapp luajit)

ExternalProject_Add mahdollistaa ulkoisen projektin lisäämisen kohteeksemme. Jos et määritä komentoja, kuten BUILD_COMMAND tai INSTALL_COMMAND, CMake etsii CMakeLists.txt ulkoisesta projektista ja suorittaa sen.
meidän tapauksessamme haluamme hyödyntää Makefiilin avulla rakennettua luajit-kirjastoa.

add_library tukee myös jo rakennettujen kirjastojen tuontia – täytyy vain asettaa sen IMPORTED_LOCATION ominaisuus.
kutsuminen ExternalProject_Add määrittää vain ulkoisen projektin kohteeksi, mutta ei rakenna sitä automaattisesti. Se rakennetaan vain, jos siihen lisätään riippuvuus. Siksi kutsumme add_dependencies tekemään tuodun kirjastomme riippuvaiseksi ulkoisesta projektista.

lopulta voimme yhdistää tuodun kirjastomme aivan kuin ”normaalin” kirjaston kanssa target_link_libraries.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *