Development/Tutorials/CMake (fi): Difference between revisions

From KDE TechBase
No edit summary
m (Skandit kuntoon)
Line 3: Line 3:
== Esipuhe ==
== 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 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 [http://www.kitware.com/ Kitware Inc.]
CMake on vapaan lähdekoodin ohjelmisto joka on julkaistu BSD-tyylisen lisenssin alaisena. CMaken ylläpitäjä on [http://www.kitware.com/ Kitware Inc.]


Näistä voit aloittaa CMaken perusteiden opiskelun (englanniksi):
Näistä voit aloittaa CMaken perusteiden opiskelun (englanniksi):
* [http://www.cmake.org/HTML/Documentation.html CMake Ohjekirja]
* [http://www.cmake.org/HTML/Documentation.html CMake Ohjekirja]
* [http://www.cmake.org/Wiki/CMake CMake Wiki]
* [http://www.cmake.org/Wiki/CMake CMake Wiki]
* [http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks CMake - Järjestelmän Tarkistukset]
* [http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks CMake - Järjestelmän Tarkistukset]
* [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware CMake - Kuinka Löytää Asennetut Ohjelmat]
* [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware CMake - Kuinka Löytää Asennetut Ohjelmat]
* [http://www.cmake.org/Wiki/HowToBuildKDE4Software KDE 4 Perehdytys CMake Wikissä]
* [http://www.cmake.org/Wiki/HowToBuildKDE4Software KDE 4 Perehdytys CMake Wikissä]
* [http://www.cmake.org/Wiki/CMake_FAQ CMake FAQ]
* [http://www.cmake.org/Wiki/CMake_FAQ CMake FAQ]
* [http://mail.kde.org/pipermail/kde-buildsystem/ Kde-buildsystem - Postituslistan arkisto]
* [http://mail.kde.org/pipermail/kde-buildsystem/ Kde-buildsystem - Postituslistan arkisto]
Voit myös liittyä CMake [http://www.cmake.org/mailman/listinfo/cmake postituslistalle].
Voit myös liittyä CMake [http://www.cmake.org/mailman/listinfo/cmake postituslistalle].


== Miksi käyttää CMakea ? ==
== 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 vankempiin KDE työkaluihin kuten automake ja unsermake:
Maaliskuussa 2006 päätettiin valita CMake KDE 4 julkaisun viralliseksi työkaluksi, pääsääntöisesti sen teknisten ominaisuuksien vuoksi verrattuna vankempiin KDE työkaluihin kuten automake ja unsermake:


* CMake on kehitetty KDE:stä riippumattomana, ja sitä voidaan käyttää myös muissa projekteissa
* 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ösajat jäävät paljon pienemmiksi, pääosin koska libtoolia ei enää tarvita
* Käännöstiedostot ovat helpompia kirjoittaa
* Käännöstiedostot ovat helpompia kirjoittaa


==  KDE:n kääntäminen CMakea käyttäen ==
==  KDE:n kääntäminen CMakea käyttäen ==
=== Lataa ja asenna CMake ===
=== Lataa ja asenna CMake ===
====  Linux, BSD, sekä muut Unix Järjestelmät ====
====  Linux, BSD, sekä muut Unix Järjestelmät ====
Hae viimeisin vakaa versio CMakesta [http://www.cmake.org/HTML/Download.html täältä.]
Hae viimeisin vakaa versio CMakesta [http://www.cmake.org/HTML/Download.html täältä.]


Pura ja käännä:
Pura ja käännä:


<code>
<code>
Line 40: Line 40:
</code>
</code>


Oletuksena ylläoleva asentaa CMaken /usr/local, joten varmista että /usr/local/bin on määritelty polussa. Vaihtaaksesi asennushakemistoa (esim. /usr debianissa), lisää '--prefix=PATH' valitsin bootstrap komentoon. (Esim: '''$ ../bootstrap --prefix=/usr''')
Oletuksena yll&auml;oleva asentaa CMaken /usr/local, 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än kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs täältä].
Jos haluat asentaa viimeisimm&auml;n kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs t&auml;&auml;lt&auml;].


==== Windows ====
==== Windows ====


Hae viimeisin vakaa versio CMakesta [http://www.cmake.org/HTML/Download.html täältä.]
Hae viimeisin vakaa versio CMakesta [http://www.cmake.org/HTML/Download.html t&auml;&auml;lt&auml;.]


Ladattuasi, suorita cmake asennusohjelma.
Ladattuasi, suorita cmake asennusohjelma.


Oletuksena CMake asennetaan C:\Program Files\CMake 2.4 - hakemistoon. Varmista että C:\Program Files\CMake 2.4\bin löytyy polkumuuttujasta.
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än kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs täältä].
Jos haluat asentaa viimeisimm&auml;n kehitysversion, seuraa ohjeita [http://cmake.org/HTML/Download.html#cvs t&auml;&auml;lt&auml;].


=== CMaken käyttäminen ===
=== CMaken k&auml;ytt&auml;minen ===
==== Linux, BSD, sekä muut Unix Järjestelmät ====
==== Linux, BSD, sek&auml; muut Unix J&auml;rjestelm&auml;t ====


Luodaksesi järjestelmällesi käännöstiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, lähdekoodin seassa sekä lähdekoodin ulkopuolella käännökset, ovat CMaken puolelta tuettuja, mutta tällä hetkellä lähdekoodin seassa kääntäminen on estetty KDE:n toteutuksessa.
Luodaksesi j&auml;rjestelm&auml;llesi k&auml;&auml;nn&ouml;stiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, l&auml;hdekoodin seassa sek&auml; l&auml;hdekoodin ulkopuolella k&auml;&auml;nn&ouml;kset, ovat CMaken puolelta tuettuja, 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ääntäminen menee seuraavasti:
Esikerkiksi, jos kdelibs/ sijaitsee ~/src hakemistossa niin k&auml;&auml;nt&auml;minen menee seuraavasti:


<code>
<code>
Line 69: Line 69:
</code>
</code>


Ylläoleva tuottaa Makefilet kdelibs/ tiedostojen kääntämiseksi kdelibs-build/ hakemistoon.
Yll&auml;oleva tuottaa Makefilet kdelibs/ tiedostojen k&auml;&auml;nt&auml;miseksi kdelibs-build/ hakemistoon.


==== Windows ====
==== Windows ====


Luodaksesi järjestelmällesi käännöstiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, lähdekoodin seassa sekä lähdekoodin ulkopuolella käännökset, ovat CMaken puolelta tuettuja, mutta tällä hetkellä lähdekoodin seassa kääntäminen on estetty KDE:n toteutuksessa.
Luodaksesi j&auml;rjestelm&auml;llesi k&auml;&auml;nn&ouml;stiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, l&auml;hdekoodin seassa sek&auml; l&auml;hdekoodin ulkopuolella k&auml;&auml;nn&ouml;kset, ovat CMaken puolelta tuettuja, 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 c:\data\kde4 hakemistossa niin kääntäminen menee seuraavasti:
Esikerkiksi, jos kdelibs/ sijaitsee c:\data\kde4 hakemistossa niin k&auml;&auml;nt&auml;minen menee seuraavasti:


<code>
<code>
Line 88: Line 88:
</code>
</code>


Ylläoleva tuottaa Makefilet kdelibs/ tiedostojen kääntämiseksi kdelibs-build/ hakemistoon. Lisätietoja KDE:n kääntämisestä Windows ympäristössä löytyy [http://techbase.kde.org/index.php?title=Projects/KDE_on_Windows täältä].
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 ====
==== KDevelop Project Files ====


Jos haluat luoda projektitiedostot KDevelopille(Makefile tiedostot sekä muutamia Kdevelopin vaatimia lisätiedostoja), suorita CMake seuraavasti:
Jos haluat luoda projektitiedostot KDevelopille(Makefile tiedostot sek&auml; muutamia Kdevelopin vaatimia lis&auml;tiedostoja), suorita CMake seuraavasti:


<code>
<code>
Line 98: Line 98:
</code>
</code>


'cmake -h' näyttää muut CMakessa tuetut valitsimet.  
'cmake -h' n&auml;ytt&auml;&auml; muut CMakessa tuetut valitsimet.  


==== CMake ja Qt4 ====
==== CMake ja Qt4 ====


Paikallistaakseen QT 4 kirjaston, CMake etsii qmakea polusta. CMake ei hyödynnä QTDIR ympäristömuuttujaa, joten varmista että oikea qmake löytyy ensimmäisenä polkumuuttujasta.
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ää yksityiskohtia ====
==== Lis&auml;&auml; yksityiskohtia ====


Kun CMaken suoritus on valmis, on CMake luonut tiedoston nimeltä "CMakeCache.txt". Tämä tiedosto sisältää kaikki asetukset jotka CMake on tunnistanut järjestelmästäsi. Jos haluat suorittaa CMaken tuottaaksesi käännöstiedostot toiseen käännösympäristöön, tai haluat että asetukset tutkitaan uudelleen, poista tämä tiedosto.
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öydä jotain, mutta olet varma että se on järjestelmässäsi, on mahdollista käsin kertoa CMakelle mistä etsiä. CMake käyttää apunaan muuttujia johon tämä tieto tallennetaan. Muuttujat on varastoitu "CMakeCache.txt" tiedostoon. Muuttujien määrittelemiseksi käsin on kolme vaihtoehtoa:
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ä: '''cmake ../kdelibs -DMUUTTUJAN_NIMI=arvo'''
* Komentorivilt&auml;: '''cmake ../kdelibs -DMUUTTUJAN_NIMI=arvo'''
* Merkkipohjainen ccmake käyttöliittymä (suorita: '''ccmake ../kdelibs''')
* Merkkipohjainen ccmake k&auml;ytt&ouml;liittym&auml; (suorita: '''ccmake ../kdelibs''')
* Muokkaamalla CMakeCache.txt tiedostoa (ei suositeltava)  
* Muokkaamalla CMakeCache.txt tiedostoa (ei suositeltava)  


Kannattaa suorittaa "ccmake ../kdelibs" ainakin kerran jotta saat kokonaiskuvan kaikista niistä muuttujista jota CMake käyttää. Ohjelmassa, paina "T", nähdäksesi myös laajennetut muuttujat. Joten, jos CMake ei löydä jotain, käynnistä ccmake ja aseta se käsin.
Kannattaa suorittaa "ccmake ../kdelibs" ainakin kerran jotta saat kokonaiskuvan kaikista niist&auml; muuttujista jota CMake k&auml;ytt&auml;&auml;. Ohjelmassa, paina "T", n&auml;hd&auml;ksesi my&ouml;s laajennetut muuttujat. Joten, jos CMake ei l&ouml;yd&auml; jotain, k&auml;ynnist&auml; ccmake ja aseta se k&auml;sin.


==== Komentorivi Muuttujat ====
==== Komentorivi Muuttujat ====


Muutamia cmake:n komentorivillä annettavia muuttujia joita saatat haluta muuttaa:
Muutamia cmake:n komentorivill&auml; annettavia muuttujia joita saatat haluta muuttaa:


* '''CMAKE_INSTALL_PREFIX:''' cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 on vastaava ./configure --prefix=/opt/kde4
* '''CMAKE_INSTALL_PREFIX:''' cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 on vastaava ./configure --prefix=/opt/kde4
* '''CMAKE_BUILD_TYPE:''' määrittelee käännöstyypin. Vaihtoehdot: "debugfull", "debug", "profile", "relwithdebinfo" ja "release". Oletuksena "relwithdebinfo" (-O2 -g). Katso lisätietoja: FindKDE4Internal.
* '''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ös tuottavat testi käännökset
* '''KDE4_BUILD_TESTS=ON:''' Luo Makefilet testiohjelmien kanssa jotka my&ouml;s tuottavat testi k&auml;&auml;nn&ouml;kset
* '''KDE4_TEST_OUTPUT=xml:''' Luo yksikkötesteistä xml muotoiset lokitiedostot QTestLib:ä käyttäen.
* '''KDE4_TEST_OUTPUT=xml:''' Luo yksikk&ouml;testeist&auml; xml muotoiset lokitiedostot QTestLib:&auml; k&auml;ytt&auml;en.
* '''KDE4_DISABLE_MULTIMEDIA=ON:''' Kääntää KDE:n ilman multimedia(ääni ja video) tukea.
* '''KDE4_DISABLE_MULTIMEDIA=ON:''' K&auml;&auml;nt&auml;&auml; KDE:n ilman multimedia(&auml;&auml;ni ja video) tukea.
* '''RPATH_STYLE:''' Ei enään valittavissa. Oletuksena kaikki käännetään oikein asetetun RPATH:n kanssa. Jos et halua käyttää lainkaan RPATH:a, aseta '''CMAKE_SKIP_RPATH=TRUE'''.
* '''RPATH_STYLE:''' Ei en&auml;&auml;n 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ättää 'foo' hakemiston kääntämättä.
* '''BUILD_foo=OFF:''' J&auml;tt&auml;&auml; 'foo' hakemiston k&auml;&auml;nt&auml;m&auml;tt&auml;.
* '''WITH_foo:''' Tähän on useita vaihtoehtoja, esim: WITH_CUPS tai WITH_Jasper. Jos poissuljet(=OFF), cmake ei edes yritä etsiä näitä. Jos on valittu, cmake yrittää etsiä näitä. Jos haku epäonnistuu, voit silti määritellä sijainnin käsin kute aikaisemmin neuvottiin.
* '''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 kute aikaisemmin neuvottiin.


==== Ympäristömuuttujat ====
==== Ymp&auml;rist&ouml;muuttujat ====


Jos sinulla on otsikkotiedostoja tai kirjastoja asennettuna epätavallisiin hakemistoihin, joista cmake ei niitä löydä, pitää asettaa seuraavat ympäristömuuttujat. Huolimatta samankaltaisesta nimeämistyylistä, näitä ei voi antaa cmakelle komentoriviltä.
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_INCLUDE_PATH''', eg. export CMAKE_INCLUDE_PATH=/sw/include
* '''CMAKE_LIBRARY_PATH''', eg. export CMAKE_LIBRARY_PATH=/sw/lib  
* '''CMAKE_LIBRARY_PATH''', eg. export CMAKE_LIBRARY_PATH=/sw/lib  


Lisätietoja muuttujista, katso [http://www.cmake.org/Wiki/CMake_Useful_Variables cmake.org wiki sivu].
Lis&auml;tietoja muuttujista, katso [http://www.cmake.org/Wiki/CMake_Useful_Variables cmake.org wiki sivu].


==== Seuraavaksi ====
==== Seuraavaksi ====


Jos cmake:n suoritus päättyy ilmoitukseen "Generating done", ei virheitä ilmentynyt. Nyt voit suorittaa käännöksen normaaliin tapaan(make, KDevelop, XCode tai MSVC). Käännöksen jälkeen asennus normaalisti esim "make install"
Jos cmake:n suoritus p&auml;&auml;ttyy ilmoitukseen "Generating done", ei virheit&auml; ilmentynyt. 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äättyy ilmoitukseen "Configuring done", on ilmennyt joitain virheitä jotka pitää selvittää.  
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 jotain seuraavaa
Jos sait virheilmoituksen jossa kerrotaan jotain seuraavaa
Line 153: Line 153:
</code>
</code>


, niin luultavammin jokin kirjastoa (tai muuta riippuvuutta) ei löytynyt. Selvittääksesi mikä kirjasto on kyseessä, etsi cmake/modules hakemistosta muuttujaa jota cmake ei löyänyt. Tässä esimerkissä se on
, niin luultavammin jokin 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;y&auml;nyt. T&auml;ss&auml; esimerkiss&auml; se on


<code>
<code>
Line 159: Line 159:
</code>
</code>


Joten puuttuva tai epänormaaliin sijaintiin asennettu kirjasto on Xtst. Kirjaston asentamisen jälkeen suorita uudelleen cmake.  
Joten puuttuva tai ep&auml;normaaliin sijaintiin asennettu kirjasto on Xtst. Kirjaston asentamisen j&auml;lkeen suorita uudelleen cmake.  


== CMaken käyttö yksinkertaisessa sovelluksessa ==
== CMaken k&auml;ytt&ouml; yksinkertaisessa sovelluksessa ==


Yksinkertsin toimiva CMakeLists.txt:
Yksinkertsin toimiva CMakeLists.txt:
Line 169: Line 169:
</code>
</code>


Tämä tuottaa main.cpp lähdekooditiedostosta suoritettavan ohjelman nimeltä "hello" (tai "hello.exe" Windowsissa). Voit käyttää samanaikaisesti sekä C attä C++ tiedostoja. Voit sijoittaa useampia suoritettavia binäärejä tai kirjastoja samaan CMakeLists.txt tiedostoon. Samaa lähdekooditiedostoa voidaan käyttää useamman binäärin kääntämiseen ja se käännetään jokaista binääriä kohden erikseen riippumatta muista binääreistä. Luultavammin tärkein osa cmaken komentokielessä ovat 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;. Luultavammin t&auml;rkein osa cmaken komentokieless&auml; ovat muuttujat:


<code>
<code>
Line 176: Line 176:
</code>
</code>


SET() komennolla voit asettaa muuttujalle arvon. Jos asetat arvoksi useamman merkkijonon, muutujan tyypiksi tulee lista. Lista on puolipisteillä eroteltu merkkijonojen luettelo. Saadaksesi muuttujan arvon käytä $(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; $(MUUTTUJA). Listan voit iteroida seuraavasti:
<code>
<code>
FOREACH():
FOREACH():
Line 185: Line 185:
</code>
</code>


CMaken komennoissa, muuttujien nimissä ja muuttujien parametreissä on huomioitava kirjainkoko. (a != A)
CMaken komennoissa, muuttujien nimiss&auml; ja muuttujien parametreiss&auml; on huomioitava kirjainkoko. (a != A)


Voit myös testata asioita:
Voit my&ouml;s testata asioita:


<code>
<code>
Line 199: Line 199:
</code>
</code>


Jälkimmäisessä esimerkissä näytetään myös miten lisätä listaan merkkijono.
J&auml;lkimm&auml;isess&auml; esimerkiss&auml; n&auml;ytet&auml;&auml;n my&ouml;s miten lis&auml;t&auml; listaan merkkijono.


Suositeltavana lukemisena on cmake Wikissä perehdytys "[http://www.cmake.org/Wiki/HowToBuildKDE4Software Kuinka käännän KDE 4 ohjelmistoja]".
Suositeltavana lukemisena on cmake Wikiss&auml; perehdytys "[http://www.cmake.org/Wiki/HowToBuildKDE4Software Kuinka k&auml;&auml;nn&auml;n KDE 4 ohjelmistoja]".




== CMaken käyttö KDE Projektissa ==
== CMaken k&auml;ytt&ouml; KDE Projektissa ==


Seuraavana on perus CMakeList tiedosto jonlla voi kääntää KDE 4 projektin:
Seuraavana on perus CMakeList tiedosto jonlla voi k&auml;&auml;nt&auml;&auml; KDE 4 projektin:


<code>
<code>
Line 220: Line 220:
</code>
</code>


Muuttujat, makrot ja muuta KDE:ä koskevaa hyödyllistä tietoa löytyy [[Development/KDE and CMake Together]] - sivulta.
Muuttujat, makrot ja muuta KDE:&auml; koskevaa hy&ouml;dyllist&auml; tietoa l&ouml;ytyy [[Development/KDE and CMake Together]] - sivulta.


== CMaken Laajentaminen ==
== CMaken Laajentaminen ==


CMakea voi laajentaa käyttämällä cmake komentojonoja. CMaken mukana tulee useita valmiita komentojonoja. UNIX pohjaisissa järjestelmissä ne on asennettuna oletuksena /usr/local/share/CMake/Modules hakemistoon(riippuen CMaken asennushakemistosta). KDE kirjastot asentavat myös joukon cmake laajennuksia share/apps/cmake/modules/ hakemistoon. KDE:n hakemistossa sijaitsevat laajennukset ohittavat järjestelmänlaajuiset cmaken laajennukset. Ohjelmapakettien etsimistä varten täällä on FindFOO.cmake tiedostot, katso lisätietoja [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware täältä]. CMaken kanssa on myös mahdollista käyttää makroja, jotka ovat käyttökelpoisia useimpiin tilanteisiin joita ohjemien kääntämisessä tarvitaan.
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 asennettuna 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 ohjemien k&auml;&auml;nt&auml;misess&auml; tarvitaan.


== autotools-pohjaisen KDE ohjelmiston kääntäminen CMakelle ==
== autotools-pohjaisen KDE ohjelmiston k&auml;&auml;nt&auml;minen CMakelle ==


Hakemistossa kdesdk/cmake/ on tiedosto nimeltään am2cmake. am2cmakea on ruby tiedosto, joten ruby tulee olla asennettu. Suorita am2cmake lähdekoodin päähakemistossa:
Hakemistossa kdesdk/cmake/ on tiedosto nimelt&auml;&auml;n am2cmake. am2cmakea on ruby tiedosto, joten ruby tulee olla asennettu. Suorita am2cmake l&auml;hdekoodin p&auml;&auml;hakemistossa:


<code>
<code>
Line 235: Line 235:
</code>
</code>


Älä unohda "--kde4" - valitsinta, muuten am2cmake ei tuota KDE 4 ohjelmistoille sopivia tiedostoja. Käännetyt tiedostot 'voivat' toimia sellaisenaan kääntämisen jälkeen, mutta monimutkaisemmat projektit yleensä vaativat lisämuokkauksia.
&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:
Saatat joutua:


* lisäämään sisällytettävia hakemistoja, käyttäen INCLUDE_DIRECTORIES()
* lis&auml;&auml;m&auml;&auml;n sis&auml;llytett&auml;via hakemistoja, k&auml;ytt&auml;en INCLUDE_DIRECTORIES()
* lisäämään linkkejä kirjastoihin, käyttäen TARGET_LINK_LIBRARIES()
* lis&auml;&auml;m&auml;&auml;n linkkej&auml; kirjastoihin, k&auml;ytt&auml;en TARGET_LINK_LIBRARIES()
* lisäämään joitain määrittelyjä kääntäjälle, käyttäen ADD_DEFINITIONS()
* 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äämään tarkistuksia. Katso [[http://www.cmake.org/Wiki/CMake_HowToDoPlatformChecks Kuinka Tehdä Ympäristö Tarkistuksia] sekä [http://www.cmake.org/Wiki/CMake_HowToFindInstalledSoftware Kuinka Löytää Asennettuja Ohjelmia]
* 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ät ole tuettuina cmakessa, sen sijaan on ConvenienceLibs.cmake. Tästä tiedostosta löydät jokaiselle yhteensopivuus kirjastolle muuttujan, joka sisältää kaikki kyseisen yhteensopivuustiedoston lähteet.
* 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 yhteensopivuus kirjastolle muuttujan, joka sis&auml;lt&auml;&auml; kaikki kyseisen yhteensopivuustiedoston l&auml;hteet.
* am2cmake luo tiedoston nimeltä AdditionalInfo.txt. Tässä tiedostossa on lueteltu kaikki *.in ja *.in.in tiedostot kyseisestä projektista. Näissä tiedostoissa olevat asiat pitää kääntää käsin CMakelle.
* 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ä Kysymyksiä ==
== Usein Kysyttyj&auml; Kysymyksi&auml; ==


=== Kuinka voin opettaa käyttämälleni tekstieditorille CMaken syntaksin ja  sisennykset ? ===
=== Kuinka voin opettaa k&auml;ytt&auml;m&auml;lleni tekstieditorille CMaken syntaksin ja  sisennykset ? ===
Katso CMake Winkin osiossa [http://www.cmake.org/Wiki/CMake_Editors_Support CMake Editors Support] on ohjeet Emacs (myös XEmacs), VIM, Kate, KWrite, sekä KDevelop editoreille.
Katso CMake Winkin 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äännöksen aikana pitäisi luoda eräitä tiedostoja. Kuinka ne tehdään ? ===
=== K&auml;&auml;nn&ouml;ksen aikana pit&auml;isi luoda er&auml;it&auml; tiedostoja. Kuinka ne tehd&auml;&auml;n ? ===
Käytä: ADD_CUSTOM_COMMAND(). Sen toiminta on selitetty CMake wikissä: [http://www.cmake.org/Wiki/CMake_FAQ#How_can_I_generate_a_source_file_during_the_build.3F  Kuinka luon lähdetiedoston käännön aikana]
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äisi kääntää ohjelma jota käytetään myöhemmin käännöstyössä luomaan tiedostoja. Kuinka tämä tehdään ? ===
=== 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 ? ===
Ajatellaan että luotavan ohjelman nimi on genembed. Käytä KDE4_ADD_EXECUTABLE(foo RUN_UNINSTALLED ${fooSources})luodaksesi käynnistettävä binääri. RUN_UNINSTALLED on tärkeä, koska ohjelmaa ajetaan käännöshakemistossa ja se pitää linkittää käännöshakemiston kirjastoihin. Suoritettava binääri(ohjelma) on käännetty RPATH asetusten mukaisesti ja on luotu suoritettava shellin komentojonotiedosto, samanniminen kuin ohjelma, mutta päätteellä ".sh". Shellin komentojonotiedosto asettaa LD_LIBRARY_PATH muuttujan ja suorittaa varsinaisen ohjelman.
Ajatellaan 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; bin&auml;&auml;ri. 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 on luotu suoritettava shellin komentojonotiedosto, samanniminen kuin ohjelma, mutta p&auml;&auml;tteell&auml; ".sh". Shellin komentojonotiedosto asettaa LD_LIBRARY_PATH muuttujan ja suorittaa varsinaisen ohjelman.
Käytä tätä komentojonotiedostoa komennolla ADD_CUSTOM_COMMAND() kuten alla olevassa esimerkissä. 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.
Esimerkki, kdelibs/kstyles/keramik/:a kopioitu esimerkki:
Esimerkki, kdelibs/kstyles/keramik/:a kopioitu esimerkki:
<code>
<code>
# käännä ajettava binää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 273: Line 273:
</code>
</code>


Kuten huomaat genembed on myös listattu riippuvuudeksi, joka tarkoittaa että cmake tietää että sen on luotava binääri nimeltä genembed ennenkuin se voi suorittaa kyseisen oman komennon.
Kuten huomaat genembed on my&ouml;s listattu riippuvuudeksi, joka tarkoittaa ett&auml; 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äyttää -DCMAKE_INSTALL_PREFIX komentoriviparametriä.  Onko KDEDIR ympäristömuuttuja tuettu CMakessa ? ===
=== En haluaisi k&auml;ytt&auml;&auml; -DCMAKE_INSTALL_PREFIX komentoriviparametri&auml;.  Onko KDEDIR ymp&auml;rist&ouml;muuttuja tuettu CMakessa ? ===
Ei.  $KDEDIR on jäämässä pois KDE 4:ssä.
Ei.  $KDEDIR on j&auml;&auml;m&auml;ss&auml; pois KDE 4:ss&auml;.


=== Miksi saan kääntäjävirheitä kuten /usr/lib/qt4/include/QtCore/qstring.h:536: undefined reference to `QString::fromLatin1_helper(char const*, int)'? ===
=== 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ää poistaa vanhat (4.0.1) tiedostot.
Jos sinulla on vanha Qt4 versio qt/lib hakemistossa, sinun pit&auml;&auml; poistaa vanhat (4.0.1) tiedostot.


=== Kuinka saan tehtyä äänekkäitä Makefile tiedostoja?  Haluan seurata tarkasti mikä 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>
<code>
Line 291: Line 291:
</code>
</code>


Lisätietoja, katso CMake wiki: [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?]
Lis&auml;tietoja, katso CMake wiki: [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ä ei ole 'make distclean' kohdetta. Kuinka siivoan pois kaikki, myös välimuistissa olevat tiedostot ? ===
=== Makefiless&auml; ei ole 'make distclean' kohdetta. Kuinka siivoan pois kaikki, my&ouml;s v&auml;limuistissa olevat tiedostot ? ===
Yksinkertaisesti, poista käännöshakemisto, tai käännöshakemiston sisältö.
Yksinkertaisesti, poista k&auml;&auml;nn&ouml;shakemisto, tai k&auml;&auml;nn&ouml;shakemiston sis&auml;lt&ouml;.


[[Category:Programming]]
[[Category:Programming]]
[[Category:Tutorial]]
[[Category:Tutorial]]
[[Category:FAQs]]
[[Category:FAQs]]

Revision as of 19:43, 10 January 2008


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 vankempiin 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

Oletuksena ylläoleva asentaa CMaken /usr/local, joten varmista että /usr/local/bin on määritelty polussa. Vaihtaaksesi asennushakemistoa (esim. /usr debianissa), lisää '--prefix=PATH' valitsin bootstrap komentoon. (Esim: $ ../bootstrap --prefix=/usr)

Jos haluat asentaa viimeisimmän kehitysversion, seuraa ohjeita täältä.

Windows

Hae viimeisin vakaa versio CMakesta täältä.

Ladattuasi, suorita cmake asennusohjelma.

Oletuksena CMake asennetaan C:\Program Files\CMake 2.4 - hakemistoon. Varmista että C:\Program Files\CMake 2.4\bin löytyy polkumuuttujasta.

Jos haluat asentaa viimeisimmän kehitysversion, seuraa ohjeita täältä.

CMaken käyttäminen

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

Luodaksesi järjestelmällesi käännöstiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, lähdekoodin seassa sekä lähdekoodin ulkopuolella käännökset, ovat CMaken puolelta tuettuja, mutta tällä hetkellä lähdekoodin seassa kääntäminen on estetty KDE:n toteutuksessa.

Esikerkiksi, jos kdelibs/ sijaitsee ~/src hakemistossa niin kääntäminen menee seuraavasti:

$ ls kdelibs/ $ mkdir kdelibs-build $ cd kdelibs-build $ cmake ../kdelibs

Ylläoleva tuottaa Makefilet kdelibs/ tiedostojen kääntämiseksi kdelibs-build/ hakemistoon.

Windows

Luodaksesi järjestelmällesi käännöstiedostot(Makefile) tarvitsee sinun ajaa CMake. Molemmat, lähdekoodin seassa sekä lähdekoodin ulkopuolella käännökset, ovat CMaken puolelta tuettuja, mutta tällä hetkellä lähdekoodin seassa kääntäminen on estetty KDE:n toteutuksessa.

Esikerkiksi, jos kdelibs/ sijaitsee c:\data\kde4 hakemistossa niin kääntäminen menee seuraavasti:

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

Ylläoleva tuottaa Makefilet kdelibs/ tiedostojen kääntämiseksi kdelibs-build/ hakemistoon. Lisätietoja KDE:n kääntämisestä Windows ympäristössä löytyy täältä.

KDevelop Project Files

Jos haluat luoda projektitiedostot KDevelopille(Makefile tiedostot sekä muutamia Kdevelopin vaatimia lisätiedostoja), suorita CMake seuraavasti:

$ cmake ../kdelibs -GKDevelop3

'cmake -h' näyttää muut CMakessa tuetut valitsimet.

CMake ja Qt4

Paikallistaakseen QT 4 kirjaston, CMake etsii qmakea polusta. CMake ei hyödynnä QTDIR ympäristömuuttujaa, joten varmista että oikea qmake löytyy ensimmäisenä polkumuuttujasta.


Lisää yksityiskohtia

Kun CMaken suoritus on valmis, on CMake luonut tiedoston nimeltä "CMakeCache.txt". Tämä tiedosto sisältää kaikki asetukset jotka CMake on tunnistanut järjestelmästäsi. Jos haluat suorittaa CMaken tuottaaksesi käännöstiedostot toiseen käännösympäristöön, tai haluat että asetukset tutkitaan uudelleen, poista tämä tiedosto.

Jos CMake ei löydä jotain, mutta olet varma että se on järjestelmässäsi, on mahdollista käsin kertoa CMakelle mistä etsiä. CMake käyttää apunaan muuttujia johon tämä tieto tallennetaan. Muuttujat on varastoitu "CMakeCache.txt" tiedostoon. Muuttujien määrittelemiseksi käsin on kolme vaihtoehtoa:

  • Komentoriviltä: cmake ../kdelibs -DMUUTTUJAN_NIMI=arvo
  • Merkkipohjainen ccmake käyttöliittymä (suorita: ccmake ../kdelibs)
  • Muokkaamalla CMakeCache.txt tiedostoa (ei suositeltava)

Kannattaa suorittaa "ccmake ../kdelibs" ainakin kerran jotta saat kokonaiskuvan kaikista niistä muuttujista jota CMake käyttää. Ohjelmassa, paina "T", nähdäksesi myös laajennetut muuttujat. Joten, jos CMake ei löydä jotain, käynnistä ccmake ja aseta se käsin.

Komentorivi Muuttujat

Muutamia cmake:n komentorivillä annettavia muuttujia joita saatat haluta muuttaa:

  • CMAKE_INSTALL_PREFIX: cmake ../kdelibs -DCMAKE_INSTALL_PREFIX=/opt/kde4 on vastaava ./configure --prefix=/opt/kde4
  • CMAKE_BUILD_TYPE: määrittelee käännöstyypin. Vaihtoehdot: "debugfull", "debug", "profile", "relwithdebinfo" ja "release". Oletuksena "relwithdebinfo" (-O2 -g). Katso lisätietoja: FindKDE4Internal.
  • KDE4_BUILD_TESTS=ON: Luo Makefilet testiohjelmien kanssa jotka myös tuottavat testi käännökset
  • KDE4_TEST_OUTPUT=xml: Luo yksikkötesteistä xml muotoiset lokitiedostot QTestLib:ä käyttäen.
  • KDE4_DISABLE_MULTIMEDIA=ON: Kääntää KDE:n ilman multimedia(ääni ja video) tukea.
  • RPATH_STYLE: Ei enään valittavissa. Oletuksena kaikki käännetään oikein asetetun RPATH:n kanssa. Jos et halua käyttää lainkaan RPATH:a, aseta CMAKE_SKIP_RPATH=TRUE.
  • BUILD_foo=OFF: Jättää 'foo' hakemiston kääntämättä.
  • WITH_foo: Tähän on useita vaihtoehtoja, esim: WITH_CUPS tai WITH_Jasper. Jos poissuljet(=OFF), cmake ei edes yritä etsiä näitä. Jos on valittu, cmake yrittää etsiä näitä. Jos haku epäonnistuu, voit silti määritellä sijainnin käsin kute aikaisemmin neuvottiin.

Ympäristömuuttujat

Jos sinulla on otsikkotiedostoja tai kirjastoja asennettuna epätavallisiin hakemistoihin, joista cmake ei niitä löydä, pitää asettaa seuraavat ympäristömuuttujat. Huolimatta samankaltaisesta nimeämistyylistä, näitä ei voi antaa cmakelle komentoriviltä.

  • CMAKE_INCLUDE_PATH, eg. export CMAKE_INCLUDE_PATH=/sw/include
  • CMAKE_LIBRARY_PATH, eg. export CMAKE_LIBRARY_PATH=/sw/lib

Lisätietoja muuttujista, katso cmake.org wiki sivu.

Seuraavaksi

Jos cmake:n suoritus päättyy ilmoitukseen "Generating done", ei virheitä ilmentynyt. Nyt voit suorittaa käännöksen normaaliin tapaan(make, KDevelop, XCode tai MSVC). Käännöksen jälkeen asennus normaalisti esim "make install"

Jos suoritus päättyy ilmoitukseen "Configuring done", on ilmennyt joitain virheitä jotka pitää selvittää.

Jos sait virheilmoituksen jossa kerrotaan jotain seuraavaa 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)

, niin luultavammin jokin kirjastoa (tai muuta riippuvuutta) ei löytynyt. Selvittääksesi mikä kirjasto on kyseessä, etsi cmake/modules hakemistosta muuttujaa jota cmake ei löyänyt. Tässä esimerkissä se on

FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH})

Joten puuttuva tai epänormaaliin sijaintiin asennettu kirjasto on Xtst. Kirjaston asentamisen jälkeen suorita uudelleen cmake.

CMaken käyttö yksinkertaisessa sovelluksessa

Yksinkertsin toimiva CMakeLists.txt:

add_executable(hello main.cpp)

Tämä tuottaa main.cpp lähdekooditiedostosta suoritettavan ohjelman nimeltä "hello" (tai "hello.exe" Windowsissa). Voit käyttää samanaikaisesti sekä C attä C++ tiedostoja. Voit sijoittaa useampia suoritettavia binäärejä tai kirjastoja samaan CMakeLists.txt tiedostoon. Samaa lähdekooditiedostoa voidaan käyttää useamman binäärin kääntämiseen ja se käännetään jokaista binääriä kohden erikseen riippumatta muista binääreistä. Luultavammin tärkein osa cmaken komentokielessä ovat muuttujat:

SET( MY_SOURCES main.cpp widget.cpp) MESSAGE(STATUS "my sources: ${MY_SOURCES}")

SET() komennolla voit asettaa muuttujalle arvon. Jos asetat arvoksi useamman merkkijonon, muutujan tyypiksi tulee lista. Lista on puolipisteillä eroteltu merkkijonojen luettelo. Saadaksesi muuttujan arvon käytä $(MUUTTUJA). Listan voit iteroida seuraavasti: FOREACH():

FOREACH(next_ITEM ${MY_SOURCES})

  MESSAGE(STATUS "next item: ${next_ITEM}")

ENDFOREACH(next_ITEM ${MY_SOURCES})

CMaken komennoissa, muuttujien nimissä ja muuttujien parametreissä on huomioitava kirjainkoko. (a != A)

Voit myös testata asioita:

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)

Jälkimmäisessä esimerkissä näytetään myös miten lisätä listaan merkkijono.

Suositeltavana lukemisena on cmake Wikissä perehdytys "Kuinka käännän KDE 4 ohjelmistoja".


CMaken käyttö KDE Projektissa

Seuraavana on perus CMakeList tiedosto jonlla voi kääntää KDE 4 projektin:

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} )

Muuttujat, makrot ja muuta KDE:ä koskevaa hyödyllistä tietoa löytyy Development/KDE and CMake Together - sivulta.

CMaken Laajentaminen

CMakea voi laajentaa käyttämällä cmake komentojonoja. CMaken mukana tulee useita valmiita komentojonoja. UNIX pohjaisissa järjestelmissä ne on asennettuna oletuksena /usr/local/share/CMake/Modules hakemistoon(riippuen CMaken asennushakemistosta). KDE kirjastot asentavat myös joukon cmake laajennuksia share/apps/cmake/modules/ hakemistoon. KDE:n hakemistossa sijaitsevat laajennukset ohittavat järjestelmänlaajuiset cmaken laajennukset. Ohjelmapakettien etsimistä varten täällä on FindFOO.cmake tiedostot, katso lisätietoja täältä. CMaken kanssa on myös mahdollista käyttää makroja, jotka ovat käyttökelpoisia useimpiin tilanteisiin joita ohjemien kääntämisessä tarvitaan.

autotools-pohjaisen KDE ohjelmiston kääntäminen CMakelle

Hakemistossa kdesdk/cmake/ on tiedosto nimeltään am2cmake. am2cmakea on ruby tiedosto, joten ruby tulee olla asennettu. Suorita am2cmake lähdekoodin päähakemistossa:

$ cd src/mykooltool/ $ am2cmake --kde4

Älä unohda "--kde4" - valitsinta, muuten am2cmake ei tuota KDE 4 ohjelmistoille sopivia tiedostoja. Käännetyt tiedostot 'voivat' toimia sellaisenaan kääntämisen jälkeen, mutta monimutkaisemmat projektit yleensä vaativat lisämuokkauksia.

Saatat joutua:

  • lisäämään sisällytettävia hakemistoja, käyttäen INCLUDE_DIRECTORIES()
  • lisäämään linkkejä kirjastoihin, käyttäen TARGET_LINK_LIBRARIES()
  • lisäämään joitain määrittelyjä kääntäjälle, käyttäen ADD_DEFINITIONS()
  • lisäämään tarkistuksia. Katso [Kuinka Tehdä Ympäristö Tarkistuksia sekä Kuinka Löytää Asennettuja Ohjelmia
  • huolehtimaan libtool-yhteensopivista kirjastoista. Ne eivät ole tuettuina cmakessa, sen sijaan on ConvenienceLibs.cmake. Tästä tiedostosta löydät jokaiselle yhteensopivuus kirjastolle muuttujan, joka sisältää kaikki kyseisen yhteensopivuustiedoston lähteet.
  • am2cmake luo tiedoston nimeltä AdditionalInfo.txt. Tässä tiedostossa on lueteltu kaikki *.in ja *.in.in tiedostot kyseisestä projektista. Näissä tiedostoissa olevat asiat pitää kääntää käsin CMakelle.

Usein Kysyttyjä Kysymyksiä

Kuinka voin opettaa käyttämälleni tekstieditorille CMaken syntaksin ja sisennykset ?

Katso CMake Winkin osiossa CMake Editors Support on ohjeet Emacs (myös XEmacs), VIM, Kate, KWrite, sekä KDevelop editoreille.

Käännöksen aikana pitäisi luoda eräitä tiedostoja. Kuinka ne tehdään ?

Käytä: ADD_CUSTOM_COMMAND(). Sen toiminta on selitetty CMake wikissä: Kuinka luon lähdetiedoston käännön aikana

Minun pitäisi kääntää ohjelma jota käytetään myöhemmin käännöstyössä luomaan tiedostoja. Kuinka tämä tehdään ?

Ajatellaan että luotavan ohjelman nimi on genembed. Käytä KDE4_ADD_EXECUTABLE(foo RUN_UNINSTALLED ${fooSources})luodaksesi käynnistettävä binääri. RUN_UNINSTALLED on tärkeä, koska ohjelmaa ajetaan käännöshakemistossa ja se pitää linkittää käännöshakemiston kirjastoihin. Suoritettava binääri(ohjelma) on käännetty RPATH asetusten mukaisesti ja on luotu suoritettava shellin komentojonotiedosto, samanniminen kuin ohjelma, mutta päätteellä ".sh". Shellin komentojonotiedosto asettaa LD_LIBRARY_PATH muuttujan ja suorittaa varsinaisen ohjelman. Käytä tätä komentojonotiedostoa komennolla ADD_CUSTOM_COMMAND() kuten alla olevassa esimerkissä. Nimen ja tarkan sijainnin saat WRAPPER_SCRIPT muuttujasta. Esimerkki, kdelibs/kstyles/keramik/:a kopioitu esimerkki:

  1. käännä ajettava binääri

KDE4_ADD_EXECUTABLE(genembed RUN_UNINSTALLED ${genembed_SRCS})

  1. hae komentojonotiedoston nimi(joka asettaa LD_LIBRARY_PATH muuttujan)

GET_TARGET_PROPERTY(GENEMBED_EXECUTABLE genembed WRAPPER_SCRIPT)

  1. 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}

)

Kuten huomaat genembed on myös listattu riippuvuudeksi, joka tarkoittaa että cmake tietää että sen on luotava binääri nimeltä genembed ennenkuin se voi suorittaa kyseisen oman komennon.

En haluaisi käyttää -DCMAKE_INSTALL_PREFIX komentoriviparametriä. Onko KDEDIR ympäristömuuttuja tuettu CMakessa ?

Ei. $KDEDIR on jäämässä pois KDE 4:ssä.

Miksi saan kääntäjävirheitä 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ää poistaa vanhat (4.0.1) tiedostot.

Kuinka saan tehtyä äänekkäitä Makefile tiedostoja? Haluan seurata tarkasti mikä komento milloinkin on menossa.

Anna VERBOSE muuttuja make:lle, esim: % make VERBOSE=1 or % VERBOSE=1 make

Lisätietoja, katso CMake wiki: Is there an option to produce more 'verbose' compiling?

Makefilessä ei ole 'make distclean' kohdetta. Kuinka siivoan pois kaikki, myös välimuistissa olevat tiedostot ?

Yksinkertaisesti, poista käännöshakemisto, tai käännöshakemiston sisältö.