Ero sivun ”CMake syvemmin” versioiden välillä
Siirry navigaatioon
Siirry hakuun
| (5 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
| Rivi 3: | Rivi 3: | ||
=CMaken käytön kuvaus= | =CMaken käytön kuvaus= | ||
'''[[CMake]]''' on työkalu, jolla voidaan tehdä '''Makefile'''jä tai valmiita ohjelmistopaketteja. Se on siis [[Make]]-käskyä nähden pykälän verran abstraktimpi taso ylöspäin. Cmake:lla voidaan mm. tehdä deb- ja rpm-paketteja cpack-apuohjelman avulla. Lisäksi sen avulla voidaan hallita C/C++ kirjastoja joko valmiiksi käännettyjä moduleita tai luoda omia dynaamisia moduleita. | == Yleisesti == | ||
<span style = "font-family:monospace; background-color:lightgray;" >'''[[CMake]]'''</span> on työkalu, jolla voidaan tehdä <span style = "font-family:monospace; background-color:lightgray;" >'''Makefile'''</span>jä tai valmiita ohjelmistopaketteja. Se on siis <span style = "font-family:monospace; background-color:lightgray;" >[[Make]]</span>-käskyä nähden pykälän verran abstraktimpi taso ylöspäin. Cmake:lla voidaan mm. tehdä <span style = "font-family:monospace; background-color:lightgray;" >deb</span>- ja <span style = "font-family:monospace; background-color:lightgray;" >rpm</span>-paketteja <span style = "font-family:monospace; background-color:lightgray;" >cpack</span>-apuohjelman avulla. Lisäksi sen avulla voidaan hallita <span style = "font-family:monospace; background-color:lightgray;" >C/C++</span> kirjastoja joko valmiiksi käännettyjä moduleita tai luoda omia dynaamisia moduleita. | |||
'''CMakeLists.txt''' on tiedosto, jonka perusteella cmake prosessoi ohjelmaprojektin. Ohjelmaprojekti voi olla esimerkiksi:testaus, ohjelman kääntäminen tai ohjelmapaketin luominen. CMakeLists.txt-tiedosto on siis yksi abstraktiotaso Makefile:stä abstraktimpaanpäin. CMakeLists.txt-tiedostot ovat käteviä erityisesti ohjelmoijille, jotka voivat niiden avulla automatisoida projektin | <span style = "font-family:monospace; background-color:lightgray;" >'''CMakeLists.txt'''</span> on tiedosto, jonka perusteella cmake prosessoi ohjelmaprojektin. Ohjelmaprojekti voi olla esimerkiksi:testaus, ohjelman kääntäminen tai ohjelmapaketin luominen. <span style = "font-family:monospace; background-color:lightgray;" >CMakeLists.txt</span>-tiedosto on siis yksi abstraktiotaso <span style = "font-family:monospace; background-color:lightgray;" >Makefile</span>:stä abstraktimpaanpäin. <span style = "font-family:monospace; background-color:lightgray;" >CMakeLists.txt</span>-tiedostot ovat käteviä erityisesti ohjelmoijille, jotka voivat niiden avulla automatisoida projektin <span style = "font-family:monospace; background-color:lightgray;" >Makefile</span>jen ja ohjelmapakettien avulla. | ||
CMakeLists.txt-tiedostossa voi olla monia käskyjä seka erittäin suuri määrä muuttuja-arvoja ja niitä voi itse lisätä. Tärkeimpiä käskyjä ovat esimerkiksi: cmake_minimum_required, project,set, install, include, if/else/elseif/endif, add_subdirectory, add_library, add_executable, target_link_libraries, configure_file, message, foreach, while/endwhile, function. | <span style = "font-family:monospace; background-color:lightgray;" >CMakeLists.txt</span>-tiedostossa voi olla monia käskyjä seka erittäin suuri määrä muuttuja-arvoja ja niitä voi itse lisätä. Tärkeimpiä '''käskyjä''' ovat esimerkiksi: <span style = "font-family:monospace; background-color:lightgray;" >cmake_minimum_required, project,set, install, include, if/else/elseif/endif, add_subdirectory, add_library, add_executable, target_link_libraries, configure_file, message, foreach, while/endwhile, function</span>. | ||
Kuten käskyistäkin voi päätellä, niin cmake on ohjelmointikieli. Koska siinä pystytään asettamaan muuttujia ja ehdollisia silmukoita, se täyttää kirkkaasti turingkoneen määritelmän. Tämä ohjelmointikieli on erikoistunut ohjelmien käännösten ja pakettien hallintaan. Kieli on case insensitive eli isolla ja pienellä kirjaimella ei ole eroa ohjelman prosessoinnissa. Varatut sanat saa selville käskyillä: cmake --help-command-list, cmake --help-variable-list ja cmake --help-property-list. Jos ajat käskyt, niin huomaat, että varattuja sanoja on todella monta. Esimerksiksi 3.28.3 versiossa on 1389-varattua sanaa. Onneksi kourallisella käskykannalla pääsee hyvin alkuun. | Kuten käskyistäkin voi päätellä, niin <span style = "font-family:monospace; background-color:lightgray;" >'''cmake'''</span> '''on ohjelmointikieli'''. Koska siinä pystytään asettamaan muuttujia ja ehdollisia silmukoita, se täyttää kirkkaasti turingkoneen määritelmän. Tämä ohjelmointikieli on erikoistunut ohjelmien käännösten ja pakettien hallintaan. Kieli on case insensitive eli isolla ja pienellä kirjaimella ei ole eroa ohjelman prosessoinnissa. Varatut sanat saa selville käskyillä: <span style = "font-family:monospace; background-color:lightgray;" >cmake --help-command-list, cmake --help-variable-list ja cmake --help-property-list</span>. Jos ajat käskyt, niin huomaat, että varattuja sanoja on todella monta. Esimerksiksi 3.28.3 versiossa on 1389-varattua sanaa. Onneksi kourallisella käskykannalla pääsee hyvin alkuun. | ||
Cmake:n kotisivu on https://cmake.org/, josta löytyvät myös cmake-dokumentaatio. Cmake:n avulla käytetään myös erilaisia testaus-/paketoimis-ja käännösjärjestelmiä, kuten ctest, cpack, make, ninja jne. (joita muita kuin ctest:iä käytetään tässä esittelyssä). | <span style = "font-family:monospace; background-color:lightgray;" >Cmake</span>:n kotisivu on https://cmake.org/, josta löytyvät myös <span style = "font-family:monospace; background-color:lightgray;" >cmake</span>-dokumentaatio. Cmake:n avulla käytetään myös erilaisia testaus-/paketoimis-ja käännösjärjestelmiä, kuten <span style = "font-family:monospace; background-color:lightgray;" >ctest, cpack, make, ninja</span> jne. (joita muita kuin <span style = "font-family:monospace; background-color:lightgray;" >ctest</span>:iä käytetään tässä esittelyssä). | ||
== Ensimmäinen cmake-projekti == | == Ensimmäinen cmake-projekti == | ||
| Rivi 46: | Rivi 47: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ensimmäinen rivi määrittelee, mikä cmake:n versio vähintään vaaditaan CMakeLists.txt:n suoritukseen. Project-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. Message-käskyllä tulostetaan käännösjonoon tekstiä. Tämän avulla voimme siis tulostaa projektimme tiedot. Rivillä 11 tulostamme käännösjonoon projektimme nimen, joka on nimeltään ”eka-projekti”. Projektin nimessä tulee olla vähintään yksi miinus (’-’)merkki. Seuraavasssa rivissä tulostamme projektin täyden version, joka siis on 0.1.0.2, kuten olimme project-käskyssä sen määritelleet. Seuraavat kolme message-käskyä kirjoittaa parsitun (järjestyksessä: MAJOR.MINOR.PATCH.TWEAK)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (PROJECT_DESCRIPTION). Viimeisessä message-rivissä tulostuu projektin kotisivu (PROJECT_HOMEPAGE_URL). | Ensimmäinen rivi määrittelee, mikä <span style = "font-family:monospace; background-color:lightgray;" >cmake</span>:n versio vähintään vaaditaan <span style = "font-family:monospace; background-color:lightgray;" >CMakeLists.txt</span>:n suoritukseen. <span style = "font-family:monospace; background-color:lightgray;" >Project</span>-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. <span style = "font-family:monospace; background-color:lightgray;" >Message</span>-käskyllä tulostetaan käännösjonoon tekstiä. Tämän avulla voimme siis tulostaa projektimme tiedot. Rivillä 11 tulostamme käännösjonoon projektimme nimen, joka on nimeltään ”eka-projekti”. Projektin nimessä tulee olla vähintään yksi miinus (’-’)merkki. Seuraavasssa rivissä tulostamme projektin täyden version, joka siis on 0.1.0.2, kuten olimme project-käskyssä sen määritelleet. Seuraavat kolme message-käskyä kirjoittaa parsitun (järjestyksessä: <span style = "font-family:monospace; background-color:lightgray;" >MAJOR.MINOR.PATCH.TWEAK</span>)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (<span style = "font-family:monospace; background-color:lightgray;" >PROJECT_DESCRIPTION</span>). Viimeisessä message-rivissä tulostuu projektin kotisivu (<span style = "font-family:monospace; background-color:lightgray;" >PROJECT_HOMEPAGE_URL</span>). | ||
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (HUOM: ainakin cmake-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.) | Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. ('''HUOM''': ainakin <span style = "font-family:monospace; background-color:lightgray;" >cmake</span>-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.) | ||
<syntaxhighlight lang="bash" line> | <syntaxhighlight lang="bash" line> | ||
| Rivi 70: | Rivi 71: | ||
-- Generating done (0.0s) | -- Generating done (0.0s) | ||
-- Build files have been written to: /home/.../cmakeprojekti/build | -- Build files have been written to: /home/.../cmakeprojekti/build | ||
Huomioitavaa on, ettei make all-käsky kirjoita mitään, eikä se luo ajettavia tiedostoja. Toisaalta cmake-ohjelma ei myöskään anna mitään virheilmoituksia, niin siksi voimme määritellä tämän testin onnistuneeksi. Lisäksi on huomoitavaa, että muuttujien nimet (VERSION, DESCRIPTION, HOMEPAGE_URL ja LANGUAGES) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat. | Huomioitavaa on, ettei <span style = "font-family:monospace; background-color:lightgray;" >make all</span>-käsky kirjoita mitään, eikä se luo ajettavia tiedostoja. Toisaalta cmake-ohjelma ei myöskään anna mitään virheilmoituksia, niin siksi voimme määritellä tämän testin onnistuneeksi. Lisäksi on huomoitavaa, että muuttujien nimet (<span style = "font-family:monospace; background-color:lightgray;" >VERSION, DESCRIPTION, HOMEPAGE_URL</span> ja <span style = "font-family:monospace; background-color:lightgray;" >LANGUAGES</span>) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat. | ||
== Ensimmäinen C/C++ ohjelma == | == Ensimmäinen C/C++ ohjelma == | ||