Difference between revisions of "Development/Tutorials/CMake (fi)"

Jump to: navigation, search
(fix link)
m (Text replace - "<code>" to "<syntaxhighlight lang="text">")
Line 32: Line 32:
 
Pura ja k&auml;&auml;nn&auml;:
 
Pura ja k&auml;&auml;nn&auml;:
  
<code>
+
<syntaxhighlight lang="text">
 
$ mkdir cmake-build
 
$ mkdir cmake-build
 
$ cd cmake-build
 
$ cd cmake-build
Line 61: Line 61:
 
Esikerkiksi, jos kdelibs/ sijaitsee ~/src hakemistossa niin k&auml;&auml;nt&auml;minen menee seuraavasti:
 
Esikerkiksi, jos kdelibs/ sijaitsee ~/src hakemistossa niin k&auml;&auml;nt&auml;minen menee seuraavasti:
  
<code>
+
<syntaxhighlight lang="text">
 
$ ls
 
$ ls
 
kdelibs/
 
kdelibs/
Line 77: Line 77:
 
Esimerkiksi, jos kdelibs/ sijaitsee c:\data\kde4 hakemistossa, niin k&auml;&auml;nt&auml;minen tehdään seuraavasti:
 
Esimerkiksi, jos kdelibs/ sijaitsee c:\data\kde4 hakemistossa, niin k&auml;&auml;nt&auml;minen tehdään seuraavasti:
  
<code>
+
<syntaxhighlight lang="text">
 
c:\daten\kde4> cd kdelibs\win
 
c:\daten\kde4> cd kdelibs\win
 
c:\daten\kde4> cmake
 
c:\daten\kde4> cmake
Line 94: Line 94:
 
Jos haluat luoda projektitiedostot KDevelopille (Makefile-tiedostot sek&auml; muutamia KDevelopin vaatimia lis&auml;tiedostoja), suorita CMake seuraavasti:
 
Jos haluat luoda projektitiedostot KDevelopille (Makefile-tiedostot sek&auml; muutamia KDevelopin vaatimia lis&auml;tiedostoja), suorita CMake seuraavasti:
  
<code>
+
<syntaxhighlight lang="text">
 
$ cmake ../kdelibs -GKDevelop3
 
$ cmake ../kdelibs -GKDevelop3
 
</code>
 
</code>
Line 146: Line 146:
  
 
Jos sait virheilmoituksen jossa kerrotaan seuraavan kaltaista:
 
Jos sait virheilmoituksen jossa kerrotaan seuraavan kaltaista:
<code>
+
<syntaxhighlight lang="text">
 
CMake Error: This project requires some variables to be set,
 
CMake Error: This project requires some variables to be set,
 
and cmake can not find them.
 
and cmake can not find them.
Line 155: Line 155:
 
niin luultavammin jotakin kirjastoa (tai muuta riippuvuutta) ei l&ouml;ytynyt. Selvitt&auml;&auml;ksesi mik&auml; kirjasto on kyseess&auml;, etsi cmake/modules hakemistosta muuttujaa jota cmake ei l&ouml;yt&auml;nyt. T&auml;ss&auml; esimerkiss&auml; se on
 
niin luultavammin jotakin kirjastoa (tai muuta riippuvuutta) ei l&ouml;ytynyt. Selvitt&auml;&auml;ksesi mik&auml; kirjasto on kyseess&auml;, etsi cmake/modules hakemistosta muuttujaa jota cmake ei l&ouml;yt&auml;nyt. T&auml;ss&auml; esimerkiss&auml; se on
  
<code>
+
<syntaxhighlight lang="text">
 
FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
 
FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
 
</code>
 
</code>
Line 165: Line 165:
 
Yksinkertaisin toimiva CMakeLists.txt:
 
Yksinkertaisin toimiva CMakeLists.txt:
  
<code>
+
<syntaxhighlight lang="text">
 
add_executable(hello main.cpp)
 
add_executable(hello main.cpp)
 
</code>
 
</code>
Line 171: Line 171:
 
T&auml;m&auml; tuottaa main.cpp -l&auml;hdekooditiedostosta suoritettavan ohjelman nimelt&auml; "hello" (tai "hello.exe" Windowsissa). Voit k&auml;ytt&auml;&auml; samanaikaisesti sek&auml; C- att&auml; C++-tiedostoja. Voit sijoittaa useampia suoritettavia bin&auml;&auml;rej&auml; tai kirjastoja samaan CMakeLists.txt tiedostoon. Samaa l&auml;hdekooditiedostoa voidaan k&auml;ytt&auml;&auml; useamman bin&auml;&auml;rin k&auml;&auml;nt&auml;miseen ja se k&auml;&auml;nnet&auml;&auml;n jokaista bin&auml;&auml;ri&auml; kohden erikseen riippumatta muista bin&auml;&auml;reist&auml;. CMake-komentokielen tärkein osa lienevät muuttujat:
 
T&auml;m&auml; tuottaa main.cpp -l&auml;hdekooditiedostosta suoritettavan ohjelman nimelt&auml; "hello" (tai "hello.exe" Windowsissa). Voit k&auml;ytt&auml;&auml; samanaikaisesti sek&auml; C- att&auml; C++-tiedostoja. Voit sijoittaa useampia suoritettavia bin&auml;&auml;rej&auml; tai kirjastoja samaan CMakeLists.txt tiedostoon. Samaa l&auml;hdekooditiedostoa voidaan k&auml;ytt&auml;&auml; useamman bin&auml;&auml;rin k&auml;&auml;nt&auml;miseen ja se k&auml;&auml;nnet&auml;&auml;n jokaista bin&auml;&auml;ri&auml; kohden erikseen riippumatta muista bin&auml;&auml;reist&auml;. CMake-komentokielen tärkein osa lienevät muuttujat:
  
<code>
+
<syntaxhighlight lang="text">
 
SET( MY_SOURCES main.cpp widget.cpp)
 
SET( MY_SOURCES main.cpp widget.cpp)
 
MESSAGE(STATUS "my sources: ${MY_SOURCES}")
 
MESSAGE(STATUS "my sources: ${MY_SOURCES}")
Line 177: Line 177:
  
 
SET() -komennolla voit asettaa muuttujalle arvon. Jos asetat arvoksi useamman merkkijonon, muutujan tyypiksi tulee lista. Lista on puolipisteill&auml; eroteltu merkkijonojen luettelo. Saadaksesi muuttujan arvon k&auml;yt&auml; muotoa $(MUUTTUJA). Listan voit iteroida seuraavasti:
 
SET() -komennolla voit asettaa muuttujalle arvon. Jos asetat arvoksi useamman merkkijonon, muutujan tyypiksi tulee lista. Lista on puolipisteill&auml; eroteltu merkkijonojen luettelo. Saadaksesi muuttujan arvon k&auml;yt&auml; muotoa $(MUUTTUJA). Listan voit iteroida seuraavasti:
<code>
+
<syntaxhighlight lang="text">
 
FOREACH():
 
FOREACH():
  
Line 189: Line 189:
 
Voit my&ouml;s testata ehtoja:
 
Voit my&ouml;s testata ehtoja:
  
<code>
+
<syntaxhighlight lang="text">
 
IF (UNIX)
 
IF (UNIX)
 
   MESSAGE(STATUS "This is UNIX (including OS X and CygWin)")
 
   MESSAGE(STATUS "This is UNIX (including OS X and CygWin)")
Line 208: Line 208:
 
Seuraavasa on perus-CMakeList-tiedosto, jolla voi k&auml;&auml;nt&auml;&auml; KDE 4 -projektin:
 
Seuraavasa on perus-CMakeList-tiedosto, jolla voi k&auml;&auml;nt&auml;&auml; KDE 4 -projektin:
  
<code>
+
<syntaxhighlight lang="text">
 
PROJECT(kde4project)
 
PROJECT(kde4project)
 
FIND_PACKAGE(KDE4 REQUIRED)
 
FIND_PACKAGE(KDE4 REQUIRED)
Line 230: Line 230:
 
Hakemistossa kdesdk/cmake/ on tiedosto nimelt&auml;&auml;n am2cmake. am2cmake on ruby-skripti, joten ruby tulee olla asennettu. Suorita am2cmake l&auml;hdekoodin p&auml;&auml;hakemistossa:
 
Hakemistossa kdesdk/cmake/ on tiedosto nimelt&auml;&auml;n am2cmake. am2cmake on ruby-skripti, joten ruby tulee olla asennettu. Suorita am2cmake l&auml;hdekoodin p&auml;&auml;hakemistossa:
  
<code>
+
<syntaxhighlight lang="text">
 
$ cd src/mykooltool/
 
$ cd src/mykooltool/
 
$ am2cmake --kde4
 
$ am2cmake --kde4
Line 259: Line 259:
 
K&auml;yt&auml; t&auml;t&auml; komentojonotiedostoa komennolla ADD_CUSTOM_COMMAND() kuten alla olevassa esimerkiss&auml;. Nimen ja tarkan sijainnin saat WRAPPER_SCRIPT-muuttujasta.
 
K&auml;yt&auml; t&auml;t&auml; komentojonotiedostoa komennolla ADD_CUSTOM_COMMAND() kuten alla olevassa esimerkiss&auml;. Nimen ja tarkan sijainnin saat WRAPPER_SCRIPT-muuttujasta.
 
Tässä kdelibs/kstyles/keramik/:sta kopioitu esimerkki:
 
Tässä kdelibs/kstyles/keramik/:sta kopioitu esimerkki:
<code>
+
<syntaxhighlight lang="text">
 
# k&auml;&auml;nn&auml; ajettava bin&auml;&auml;ri
 
# k&auml;&auml;nn&auml; ajettava bin&auml;&auml;ri
 
KDE4_ADD_EXECUTABLE(genembed RUN_UNINSTALLED ${genembed_SRCS})
 
KDE4_ADD_EXECUTABLE(genembed RUN_UNINSTALLED ${genembed_SRCS})
Line 284: Line 284:
 
=== Kuinka saan tehty&auml; "&auml;&auml;nekk&auml;it&auml;" Makefile tiedostoja?  Haluan seurata tarkasti mik&auml; komento milloinkin on menossa. ===
 
=== Kuinka saan tehty&auml; "&auml;&auml;nekk&auml;it&auml;" Makefile tiedostoja?  Haluan seurata tarkasti mik&auml; komento milloinkin on menossa. ===
 
Anna VERBOSE muuttuja make:lle, esim:
 
Anna VERBOSE muuttuja make:lle, esim:
<code>
+
<syntaxhighlight lang="text">
 
% make VERBOSE=1
 
% make VERBOSE=1
 
</code>
 
</code>
 
tai
 
tai
<code>
+
<syntaxhighlight lang="text">
 
% VERBOSE=1 make
 
% VERBOSE=1 make
 
</code>
 
</code>

Revision as of 21:44, 29 June 2011


Contents

Development/Tutorials/CMake


Esipuhe

CMake tuottaa ohjaustiedostot järjestelmän omalle kääntäjälle omien komentotiedostojensa avulla. Se voi luoda GNU Makefilet, KDevelop-projektitiedostot, XCode-projektitiedostot sekä Visual Studio-projektitiedostot.

CMake on vapaan lähdekoodin ohjelmisto joka on julkaistu BSD-tyylisen lisenssin alaisena. CMaken ylläpitäjä on Kitware Inc.

Näistä voit aloittaa CMaken perusteiden opiskelun (englanniksi):

Voit myös liittyä CMake-postituslistalle.

Miksi käyttää CMakea?

Maaliskuussa 2006 päätettiin valita CMake KDE 4 julkaisun viralliseksi työkaluksi, pääsääntöisesti sen teknisten ominaisuuksien vuoksi verrattuna vanhempiin KDE työkaluihin kuten automake ja unsermake:

  • CMake on kehitetty KDE:stä riippumattomana, ja sitä voidaan käyttää myös muissa projekteissa
  • Käännösajat jäävät paljon pienemmiksi, pääosin koska libtoolia ei enää tarvita
  • Käännöstiedostot ovat helpompia kirjoittaa

KDE:n kääntäminen CMakea käyttäen

Lataa ja asenna CMake

Linux, BSD, sekä muut Unix Järjestelmät

Hae viimeisin vakaa versio CMakesta täältä.

Pura ja käännä:

$ mkdir cmake-build
$ cd cmake-build
$ ../bootstrap
$ make
$ make install
</code>
 
Oletuksena yll&auml;oleva asentaa CMaken /usr/local -puuhun, joten varmista ett&auml; /usr/local/bin on m&auml;&auml;ritelty polussa. Vaihtaaksesi asennushakemistoa (esim. /usr debianissa), lis&auml;&auml; '--prefix=PATH' valitsin bootstrap-komentoon. (Esim: '''$ ../bootstrap --prefix=/usr''')
 
Jos haluat asentaa viimeisimm&auml;n kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs t&auml;&auml;lt&auml;].
 
==== Windows ====
 
Hae viimeisin vakaa versio CMakesta [http://www.cmake.org/HTML/Download.html t&auml;&auml;lt&auml;.]
 
Ladattuasi, suorita cmake asennusohjelma.
 
Oletuksena CMake asennetaan C:\Program Files\CMake 2.4 - hakemistoon. Varmista ett&auml; C:\Program Files\CMake 2.4\bin l&ouml;ytyy polkumuuttujasta.
 
Jos haluat asentaa viimeisimm&auml;n kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs t&auml;&auml;lt&auml;].
 
=== CMaken k&auml;ytt&auml;minen ===
==== Linux, BSD, sek&auml; muut Unix J&auml;rjestelm&auml;t ====
 
Luodaksesi j&auml;rjestelm&auml;llesi k&auml;&auml;nn&ouml;stiedostot (Makefile) sinun tarvitsee ajaa CMake. CMake tukee käännöksiä sekä l&auml;hdekoodin seassa että sen ulkopuolella, mutta t&auml;ll&auml; hetkell&auml; l&auml;hdekoodin seassa k&auml;&auml;nt&auml;minen on estetty KDE:n toteutuksessa.
 
Esikerkiksi, jos kdelibs/ sijaitsee ~/src hakemistossa niin k&auml;&auml;nt&auml;minen menee seuraavasti:
 
<syntaxhighlight lang="text">
$ ls
kdelibs/
$ mkdir kdelibs-build
$ cd kdelibs-build
$ cmake ../kdelibs
</code>
 
Yll&auml;oleva tuottaa Makefilet kdelibs/ -tiedostojen k&auml;&auml;nt&auml;miseksi kdelibs-build/ hakemistoon.
 
==== Windows ====
 
Luodaksesi j&auml;rjestelm&auml;llesi k&auml;&auml;nn&ouml;stiedostot (Makefile) sinun tarvitsee ajaa CMake. CMake tukee käännöksiä sekä l&auml;hdekoodin seassa että sen ulkopuolella, mutta t&auml;ll&auml; hetkell&auml; l&auml;hdekoodin seassa k&auml;&auml;nt&auml;minen on estetty KDE:n toteutuksessa.
 
Esimerkiksi, jos kdelibs/ sijaitsee c:\data\kde4 hakemistossa, niin k&auml;&auml;nt&auml;minen tehdään seuraavasti:
 
<syntaxhighlight lang="text">
c:\daten\kde4> cd kdelibs\win
c:\daten\kde4> cmake
c:\daten\kde4> make 
c:\daten\kde4> make install
c:\daten\kde4> cd ..
c:\daten\kde4> mkdir kdelibs-build
c:\daten\kde4> cd kdelibs-build
c:\daten\kde4\kdelibs-build> cmake ..\kdelibs
</code>
 
Yll&auml;oleva tuottaa Makefilet kdelibs/ -tiedostojen k&auml;&auml;nt&auml;miseksi kdelibs-build/ -hakemistoon. Lis&auml;tietoja KDE:n k&auml;&auml;nt&auml;misest&auml; Windows ymp&auml;rist&ouml;ss&auml; l&ouml;ytyy [http://techbase.kde.org/index.php?title=Projects/KDE_on_Windows t&auml;&auml;lt&auml;].
 
==== KDevelop Project Files ====
 
Jos haluat luoda projektitiedostot KDevelopille (Makefile-tiedostot sek&auml; muutamia KDevelopin vaatimia lis&auml;tiedostoja), suorita CMake seuraavasti:
 
<syntaxhighlight lang="text">
$ cmake ../kdelibs -GKDevelop3
</code>
 
'cmake -h' n&auml;ytt&auml;&auml; muut CMakessa tuetut valitsimet. 
 
==== CMake ja Qt4 ====
 
Paikallistaakseen QT 4 kirjaston CMake etsii qmakea polusta. CMake ei hy&ouml;dynn&auml; QTDIR-ymp&auml;rist&ouml;muuttujaa, joten varmista ett&auml; oikea qmake l&ouml;ytyy ensimm&auml;isen&auml; polkumuuttujasta.
 
 
==== Lis&auml;&auml; yksityiskohtia ====
 
Kun CMaken suoritus on valmis, on CMake luonut tiedoston nimelt&auml; "CMakeCache.txt". T&auml;m&auml; tiedosto sis&auml;lt&auml;&auml; kaikki asetukset jotka CMake on tunnistanut j&auml;rjestelm&auml;st&auml;si. Jos haluat suorittaa CMaken tuottaaksesi k&auml;&auml;nn&ouml;stiedostot toiseen k&auml;&auml;nn&ouml;symp&auml;rist&ouml;&ouml;n, tai haluat ett&auml; asetukset tutkitaan uudelleen, poista t&auml;m&auml; tiedosto.
 
Jos CMake ei l&ouml;yd&auml; jotain, mutta olet varma ett&auml; se on j&auml;rjestelm&auml;ss&auml;si, on mahdollista k&auml;sin kertoa CMakelle mist&auml; etsi&auml;. CMake k&auml;ytt&auml;&auml; apunaan muuttujia johon t&auml;m&auml; tieto tallennetaan. Muuttujat on varastoitu "CMakeCache.txt" -tiedostoon. Muuttujien m&auml;&auml;rittelemiseksi k&auml;sin on kolme vaihtoehtoa:
 
* Komentorivilt&auml;: '''cmake ../kdelibs -DMUUTTUJAN_NIMI=arvo'''
* Merkkipohjainen ccmake-k&auml;ytt&ouml;liittym&auml; (suorita: '''ccmake ../kdelibs''')
* Muokkaamalla CMakeCache.txt -tiedostoa (ei suositella) 
 
Kannattaa suorittaa "ccmake ../kdelibs" ainakin kerran, jotta saat kokonaiskuvan kaikista niist&auml; muuttujista, joita CMake k&auml;ytt&auml;&auml;. Ohjelmassa paina "T" n&auml;hd&auml;ksesi my&ouml;s laajennetut muuttujat. Jos CMake ei siis l&ouml;yd&auml; jotain, k&auml;ynnist&auml; ccmake ja aseta se k&auml;sin.
 
==== Komentorivimuuttujat ====
 
Muutamia cmake:n komentorivill&auml; annettavia muuttujia joita saatat haluta muuttaa:
 
* '''CMAKE_INSTALL_PREFIX:''' cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 on vastaava kuin ./configure --prefix=/opt/kde4
* '''CMAKE_BUILD_TYPE:''' m&auml;&auml;rittelee k&auml;&auml;nn&ouml;styypin. Vaihtoehdot: "debugfull", "debug", "profile", "relwithdebinfo" ja "release". Oletuksena "relwithdebinfo" (-O2 -g). Katso lis&auml;tietoja: FindKDE4Internal.
* '''KDE4_BUILD_TESTS=ON:''' Luo Makefilet testiohjelmien kanssa jotka my&ouml;s tuottavat testik&auml;&auml;nn&ouml;kset
* '''KDE4_TEST_OUTPUT=xml:''' Luo yksikk&ouml;testeist&auml; XML-muotoiset lokitiedostot QTestLib:&auml; k&auml;ytt&auml;en.
* '''KDE4_DISABLE_MULTIMEDIA=ON:''' K&auml;&auml;nt&auml;&auml; KDE:n ilman multimediatuka (&auml;&auml;ni ja video).
* '''RPATH_STYLE:''' Ei en&auml;&auml; valittavissa. Oletuksena kaikki k&auml;&auml;nnet&auml;&auml;n oikein asetetun RPATH:n kanssa. Jos et halua k&auml;ytt&auml;&auml; lainkaan RPATH:a, aseta '''CMAKE_SKIP_RPATH=TRUE'''.
* '''BUILD_foo=OFF:''' J&auml;tt&auml;&auml; hakemiston 'foo' k&auml;&auml;nt&auml;m&auml;tt&auml;.
* '''WITH_foo:''' T&auml;h&auml;n on useita vaihtoehtoja, esim: WITH_CUPS tai WITH_Jasper. Jos poissuljet (=OFF), cmake ei edes yrit&auml; etsi&auml; n&auml;it&auml;. Jos on valittu, cmake yritt&auml;&auml; etsi&auml; n&auml;it&auml;. Jos haku ep&auml;onnistuu, voit silti m&auml;&auml;ritell&auml; sijainnin k&auml;sin, kuten aikaisemmin neuvottiin.
 
==== Ymp&auml;rist&ouml;muuttujat ====
 
Jos sinulla on otsikkotiedostoja tai kirjastoja asennettuna ep&auml;tavallisiin hakemistoihin, joista cmake ei niit&auml; l&ouml;yd&auml;, pit&auml;&auml; asettaa seuraavat ymp&auml;rist&ouml;muuttujat. Huolimatta samankaltaisesta nime&auml;mistyylist&auml;, n&auml;it&auml; ei voi antaa cmakelle komentorivilt&auml;.
 
* '''CMAKE_INCLUDE_PATH''', eg. export CMAKE_INCLUDE_PATH=/sw/include
* '''CMAKE_LIBRARY_PATH''', eg. export CMAKE_LIBRARY_PATH=/sw/lib 
 
Lis&auml;tietoja muuttujista: katso [http://www.cmake.org/Wiki/CMake_Useful_Variables cmake.org -wikisivu].
 
==== Seuraavaksi ====
 
Jos cmake:n suoritus p&auml;&auml;ttyy ilmoitukseen "Generating done", ei virheit&auml; ilmennyt. Nyt voit suorittaa k&auml;&auml;nn&ouml;ksen normaaliin tapaan (make, KDevelop, XCode tai MSVC). K&auml;&auml;nn&ouml;ksen j&auml;lkeen asennus normaalisti, esim. "make install"
 
Jos suoritus p&auml;&auml;ttyy ilmoitukseen "Configuring done", on ilmennyt joitain virheit&auml; jotka pit&auml;&auml; selvitt&auml;&auml;. 
 
Jos sait virheilmoituksen jossa kerrotaan seuraavan kaltaista:
<syntaxhighlight lang="text">
CMake Error: This project requires some variables to be set,
and cmake can not find them.
Please set the following variables:
X11_XTest_LIB (ADVANCED)
</code>
 
niin luultavammin jotakin kirjastoa (tai muuta riippuvuutta) ei l&ouml;ytynyt. Selvitt&auml;&auml;ksesi mik&auml; kirjasto on kyseess&auml;, etsi cmake/modules hakemistosta muuttujaa jota cmake ei l&ouml;yt&auml;nyt. T&auml;ss&auml; esimerkiss&auml; se on
 
<syntaxhighlight lang="text">
FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})
</code>
 
Joten puuttuva tai ep&auml;normaaliin sijaintiin asennettu kirjasto on Xtst. Kirjaston asentamisen j&auml;lkeen suorita uudelleen cmake. 
 
== CMaken k&auml;ytt&ouml; yksinkertaisessa sovelluksessa ==
 
Yksinkertaisin toimiva CMakeLists.txt:
 
<syntaxhighlight lang="text">
add_executable(hello main.cpp)
</code>
 
T&auml;m&auml; tuottaa main.cpp -l&auml;hdekooditiedostosta suoritettavan ohjelman nimelt&auml; "hello" (tai "hello.exe" Windowsissa). Voit k&auml;ytt&auml;&auml; samanaikaisesti sek&auml; C- att&auml; C++-tiedostoja. Voit sijoittaa useampia suoritettavia bin&auml;&auml;rej&auml; tai kirjastoja samaan CMakeLists.txt tiedostoon. Samaa l&auml;hdekooditiedostoa voidaan k&auml;ytt&auml;&auml; useamman bin&auml;&auml;rin k&auml;&auml;nt&auml;miseen ja se k&auml;&auml;nnet&auml;&auml;n jokaista bin&auml;&auml;ri&auml; kohden erikseen riippumatta muista bin&auml;&auml;reist&auml;. CMake-komentokielen tärkein osa lienevät muuttujat:
 
<syntaxhighlight lang="text">
SET( MY_SOURCES main.cpp widget.cpp)
MESSAGE(STATUS "my sources: ${MY_SOURCES}")
</code>
 
SET() -komennolla voit asettaa muuttujalle arvon. Jos asetat arvoksi useamman merkkijonon, muutujan tyypiksi tulee lista. Lista on puolipisteill&auml; eroteltu merkkijonojen luettelo. Saadaksesi muuttujan arvon k&auml;yt&auml; muotoa $(MUUTTUJA). Listan voit iteroida seuraavasti:
<syntaxhighlight lang="text">
FOREACH():
 
FOREACH(next_ITEM ${MY_SOURCES})
   MESSAGE(STATUS "next item: ${next_ITEM}")
ENDFOREACH(next_ITEM ${MY_SOURCES})
</code>
 
CMaken komennoissa, muuttujien nimiss&auml; ja muuttujien parametreiss&auml; on huomioitava kirjainkoko (a != A).
 
Voit my&ouml;s testata ehtoja:
 
<syntaxhighlight lang="text">
IF (UNIX)
   MESSAGE(STATUS "This is UNIX (including OS X and CygWin)")
ENDIF (UNIX)
 
IF (MSVC)
   SET(MY_SRCS ${MY_SRCS} winextra.cpp)
ENDIF (MSVC)
</code>
 
J&auml;lkimm&auml;isess&auml; esimerkiss&auml; n&auml;ytet&auml;&auml;n my&ouml;s miten lis&auml;t&auml;&auml;n listaan merkkijono.
 
Suositeltavaa lukemista on CMake Wikiss&auml; perehdytys "[http://www.cmake.org/Wiki/HowToBuildKDE4Software Kuinka k&auml;&auml;nn&auml;n KDE 4 -ohjelmistoja]".
 
 
== CMaken k&auml;ytt&ouml; KDE-projektissa ==
 
Seuraavasa on perus-CMakeList-tiedosto, jolla voi k&auml;&auml;nt&auml;&auml; KDE 4 -projektin:
 
<syntaxhighlight lang="text">
PROJECT(kde4project)
FIND_PACKAGE(KDE4 REQUIRED)
INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} )
 
SET(KDE4ProjectSources kde4mainapp.cpp someclass.cpp someotherclass.cpp)
 
KDE4_ADD_EXECUTABLE(kde4project ${KDE4ProjectSources} )
 
TARGET_LINK_LIBRARIES(kde4project ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} )
</code>
 
Muuttujat, makrot ja muuta KDE:&auml; koskevaa hy&ouml;dyllist&auml; tietoa l&ouml;ytyy [[Development/CMake/Addons for KDE]] -sivulta.
 
== CMaken laajentaminen ==
 
CMakea voi laajentaa k&auml;ytt&auml;m&auml;ll&auml; cmake-komentojonoja. CMaken mukana tulee useita valmiita komentojonoja. UNIX-pohjaisissa j&auml;rjestelmiss&auml; ne on asennettu oletuksena /usr/local/share/CMake/Modules -hakemistoon (riippuen CMaken asennushakemistosta). KDE-kirjastot asentavat my&ouml;s joukon cmake-laajennuksia share/apps/cmake/modules/ -hakemistoon. KDE:n hakemistossa sijaitsevat laajennukset ohittavat j&auml;rjestelm&auml;nlaajuiset cmaken laajennukset. Ohjelmapakettien etsimist&auml; varten t&auml;&auml;ll&auml; on FindFOO.cmake tiedostot, katso lis&auml;tietoja [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware t&auml;&auml;lt&auml;]. CMaken kanssa on my&ouml;s mahdollista k&auml;ytt&auml;&auml; makroja, jotka ovat k&auml;ytt&ouml;kelpoisia useimpiin tilanteisiin joita ohjelmien k&auml;&auml;nt&auml;misess&auml; tarvitaan.
 
== autotools-pohjaisen KDE-ohjelmiston k&auml;&auml;nt&auml;minen CMakelle ==
 
Hakemistossa kdesdk/cmake/ on tiedosto nimelt&auml;&auml;n am2cmake. am2cmake on ruby-skripti, joten ruby tulee olla asennettu. Suorita am2cmake l&auml;hdekoodin p&auml;&auml;hakemistossa:
 
<syntaxhighlight lang="text">
$ cd src/mykooltool/
$ am2cmake --kde4
</code>
 
&Auml;l&auml; unohda "--kde4" - valitsinta, muuten am2cmake ei tuota KDE 4 -ohjelmistoille sopivia tiedostoja. K&auml;&auml;nnetyt tiedostot 'voivat' toimia sellaisenaan k&auml;&auml;nt&auml;misen j&auml;lkeen, mutta monimutkaisemmat projektit yleens&auml; vaativat lis&auml;muokkauksia.
 
Saatat joutua:
 
* lis&auml;&auml;m&auml;&auml;n sis&auml;llytett&auml;via hakemistoja, k&auml;ytt&auml;en INCLUDE_DIRECTORIES()
* lis&auml;&auml;m&auml;&auml;n linkkej&auml; kirjastoihin, k&auml;ytt&auml;en TARGET_LINK_LIBRARIES()
* lis&auml;&auml;m&auml;&auml;n joitain m&auml;&auml;rittelyj&auml; k&auml;&auml;nt&auml;j&auml;lle, k&auml;ytt&auml;en ADD_DEFINITIONS()
* lis&auml;&auml;m&auml;&auml;n tarkistuksia. Katso [[http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks Kuinka Tehd&auml; Ymp&auml;rist&ouml; Tarkistuksia] sek&auml; [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware Kuinka l&ouml;yt&auml;&auml; asennettuja ohjelmia]
* huolehtimaan libtool-yhteensopivista kirjastoista. Ne eiv&auml;t ole tuettuina cmakessa, sen sijaan on ConvenienceLibs.cmake. T&auml;st&auml; tiedostosta l&ouml;yd&auml;t jokaiselle yhteensopivuuskirjastolle muuttujan, joka sis&auml;lt&auml;&auml; kaikki kyseisen yhteensopivuustiedoston l&auml;hteet.
* am2cmake luo tiedoston nimelt&auml; AdditionalInfo.txt. T&auml;ss&auml; tiedostossa on lueteltu kaikki *.in ja *.in.in tiedostot kyseisest&auml; projektista. N&auml;iss&auml; tiedostoissa olevat asiat pit&auml;&auml; k&auml;&auml;nt&auml;&auml; k&auml;sin CMakelle.
 
 
== Usein kysyttyj&auml; kysymyksi&auml; ==
 
=== Kuinka voin opettaa k&auml;ytt&auml;m&auml;lleni tekstieditorille CMaken syntaksin ja  sisennykset? ===
CMake Wikin osiossa [http://www.cmake.org/Wiki/CMake_Editors_Support CMake Editors Support] on ohjeet Emacs- (my&ouml;s XEmacs), VIM-, Kate-, KWrite- sek&auml; KDevelop-editoreille.
 
=== K&auml;&auml;nn&ouml;ksen aikana pit&auml;isi luoda er&auml;it&auml; tiedostoja. Kuinka ne tehd&auml;&auml;n? ===
K&auml;yt&auml;: ADD_CUSTOM_COMMAND(). Sen toiminta on selitetty CMake Wikiss&auml;: [http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F  Kuinka luon l&auml;hdetiedoston k&auml;&auml;nn&ouml;n aikana]
 
=== Minun pit&auml;isi k&auml;&auml;nt&auml;&auml; ohjelma jota k&auml;ytet&auml;&auml;n my&ouml;hemmin k&auml;&auml;nn&ouml;sty&ouml;ss&auml; luomaan tiedostoja. Kuinka t&auml;m&auml; tehd&auml;&auml;n? ===
Oletetaan, ett&auml; luotavan ohjelman nimi on genembed. K&auml;yt&auml; KDE4_ADD_EXECUTABLE(foo RUN_UNINSTALLED ${fooSources}) luodaksesi k&auml;ynnistett&auml;v&auml;n bin&auml;&auml;rin. RUN_UNINSTALLED on t&auml;rke&auml;, koska ohjelmaa ajetaan k&auml;&auml;nn&ouml;shakemistossa ja se pit&auml;&auml; linkitt&auml;&auml; k&auml;&auml;nn&ouml;shakemiston kirjastoihin. Suoritettava bin&auml;&auml;ri (ohjelma) on k&auml;&auml;nnetty RPATH-asetusten mukaisesti, ja sen lisäksi on luotu ohjelman kanssa samanniminen suoritettava shellin komentojonotiedosto, jonka p&auml;&auml;te on ".sh". Shellin komentojonotiedosto asettaa LD_LIBRARY_PATH-muuttujan ja suorittaa varsinaisen ohjelman.
K&auml;yt&auml; t&auml;t&auml; komentojonotiedostoa komennolla ADD_CUSTOM_COMMAND() kuten alla olevassa esimerkiss&auml;. Nimen ja tarkan sijainnin saat WRAPPER_SCRIPT-muuttujasta.
Tässä kdelibs/kstyles/keramik/:sta kopioitu esimerkki:
<syntaxhighlight lang="text">
# k&auml;&auml;nn&auml; ajettava bin&auml;&auml;ri
KDE4_ADD_EXECUTABLE(genembed RUN_UNINSTALLED ${genembed_SRCS})
 
# hae komentojonotiedoston nimi(joka asettaa LD_LIBRARY_PATH muuttujan)
GET_TARGET_PROPERTY(GENEMBED_EXECUTABLE genembed WRAPPER_SCRIPT)
 
# ja viimein oma komento
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/keramikrc.h
  COMMAND ${GENEMBED_EXECUTABLE} --file ${CMAKE_CURRENT_BINARY_DIR}/keramikPics.txt > \
  ${CMAKE_CURRENT_BINARY_DIR}/pixmaps.keramik
  DEPENDS genembed ${keramikPics}
)
</code>
 
Kuten huomaat, genembed on my&ouml;s listattu riippuvuudeksi. Sen ansiosta cmake tiet&auml;&auml; ett&auml; sen on luotava bin&auml;&auml;ri nimelt&auml; genembed ennenkuin se voi suorittaa kyseisen oman komennon.
 
=== En haluaisi k&auml;ytt&auml;&auml; -DCMAKE_INSTALL_PREFIX komentoriviparametria.  Tukeeko CMake KDEDIR-ymp&auml;rist&ouml;muuttujaa? ===
Ei.  $KDEDIR on j&auml;&auml;m&auml;ss&auml; pois KDE 4:ss&auml;.
 
=== Miksi saan k&auml;&auml;nt&auml;j&auml;virheit&auml; kuten /usr/lib/qt4/include/QtCore/qstring.h:536: undefined reference to `QString::fromLatin1_helper(char const*, int)'? ===
Jos sinulla on vanha Qt4-versio qt/lib hakemistossa, sinun pit&auml;&auml; poistaa vanhat (4.0.1) tiedostot.
 
=== Kuinka saan tehty&auml; "&auml;&auml;nekk&auml;it&auml;" Makefile tiedostoja?  Haluan seurata tarkasti mik&auml; komento milloinkin on menossa. ===
Anna VERBOSE muuttuja make:lle, esim:
<syntaxhighlight lang="text">
% make VERBOSE=1
</code>
tai
<syntaxhighlight lang="text">
% VERBOSE=1 make
</code>
 
Lis&auml;tietoja CMake Wikis&auml;: [http://www.cmake.org/Wiki/CMake_FAQ#Is_there_an_option_to_produce_more_.27verbose.27_compiling.3F Is there an option to produce more 'verbose' compiling?]
 
=== Makefiless&auml; ei ole 'make distclean' -kohdetta. Kuinka siivoan pois kaikki, my&ouml;s v&auml;limuistissa olevat tiedostot? ===
Poista yksinkertaisesti k&auml;&auml;nn&ouml;shakemisto tai sen sis&auml;lt&ouml;.
 
[[Category:Programming]]
[[Category:Tutorial]]
[[Category:FAQs]]

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal