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
- Visual Studio
- Eclipse
- ja lisää…
code
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
.