<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fi">
	<id>https://www.linux.fi/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peran</id>
	<title>Linux.fi - Käyttäjän muokkaukset [fi]</title>
	<link rel="self" type="application/atom+xml" href="https://www.linux.fi/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Peran"/>
	<link rel="alternate" type="text/html" href="https://www.linux.fi/wiki/Toiminnot:Muokkaukset/Peran"/>
	<updated>2026-04-07T02:54:53Z</updated>
	<subtitle>Käyttäjän muokkaukset</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58349</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58349"/>
		<updated>2024-12-20T15:45:05Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Yleisesti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
== Yleisesti ==&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039;&amp;lt;/span&amp;gt; on työkalu, jolla voidaan tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;Makefile&#039;&#039;&#039;&amp;lt;/span&amp;gt;jä tai valmiita ohjelmistopaketteja. Se on siis &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;[[Make]]&amp;lt;/span&amp;gt;-käskyä nähden pykälän verran abstraktimpi taso ylöspäin. Cmake:lla voidaan mm. tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;deb&amp;lt;/span&amp;gt;- ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;rpm&amp;lt;/span&amp;gt;-paketteja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cpack&amp;lt;/span&amp;gt;-apuohjelman avulla. Lisäksi sen avulla voidaan hallita &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;C/C++&amp;lt;/span&amp;gt; kirjastoja joko valmiiksi käännettyjä moduleita tai luoda omia dynaamisia moduleita. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&amp;lt;/span&amp;gt; on tiedosto, jonka perusteella cmake prosessoi ohjelmaprojektin. Ohjelmaprojekti voi olla esimerkiksi:testaus, ohjelman kääntäminen tai ohjelmapaketin luominen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedosto on siis yksi abstraktiotaso &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;:stä abstraktimpaanpäin. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedostot ovat käteviä erityisesti ohjelmoijille, jotka voivat niiden avulla automatisoida projektin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;jen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedostossa voi olla monia käskyjä seka erittäin suuri määrä muuttuja-arvoja ja niitä voi itse lisätä. Tärkeimpiä &#039;&#039;&#039;käskyjä&#039;&#039;&#039; ovat esimerkiksi: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;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&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kuten käskyistäkin voi päätellä, niin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;cmake&#039;&#039;&#039;&amp;lt;/span&amp;gt; &#039;&#039;&#039;on ohjelmointikieli&#039;&#039;&#039;. 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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake --help-command-list, cmake --help-variable-list ja cmake --help-property-list&amp;lt;/span&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Cmake&amp;lt;/span&amp;gt;:n kotisivu on https://cmake.org/, josta löytyvät myös &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-dokumentaatio. Cmake:n avulla käytetään myös erilaisia testaus-/paketoimis-ja käännösjärjestelmiä, kuten &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;ctest, cpack, make, ninja&amp;lt;/span&amp;gt; jne. (joita muita kuin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;ctest&amp;lt;/span&amp;gt;:iä käytetään tässä esittelyssä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58348</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58348"/>
		<updated>2024-12-20T15:42:39Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Yleisesti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
== Yleisesti ==&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039;&amp;lt;/span&amp;gt; on työkalu, jolla voidaan tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;Makefile&#039;&#039;&#039;&amp;lt;/span&amp;gt;jä tai valmiita ohjelmistopaketteja. Se on siis &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;[[Make]]&amp;lt;/span&amp;gt;-käskyä nähden pykälän verran abstraktimpi taso ylöspäin. Cmake:lla voidaan mm. tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;deb&amp;lt;/span&amp;gt;- ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;rpm&amp;lt;/span&amp;gt;-paketteja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cpack&amp;lt;/span&amp;gt;-apuohjelman avulla. Lisäksi sen avulla voidaan hallita &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;C/C++&amp;lt;/span&amp;gt; kirjastoja joko valmiiksi käännettyjä moduleita tai luoda omia dynaamisia moduleita. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&amp;lt;/span&amp;gt; on tiedosto, jonka perusteella cmake prosessoi ohjelmaprojektin. Ohjelmaprojekti voi olla esimerkiksi:testaus, ohjelman kääntäminen tai ohjelmapaketin luominen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedosto on siis yksi abstraktiotaso &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;:stä abstraktimpaanpäin. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedostot ovat käteviä erityisesti ohjelmoijille, jotka voivat niiden avulla automatisoida projektin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;jen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedostossa voi olla monia käskyjä seka erittäin suuri määrä muuttuja-arvoja ja niitä voi itse lisätä. Tärkeimpiä &#039;&#039;&#039;käskyjä&#039;&#039;&#039; ovat esimerkiksi: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;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&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kuten käskyistäkin voi päätellä, niin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;cmake&#039;&#039;&#039;&amp;lt;/span&amp;gt; &#039;&#039;&#039;on ohjelmointikieli&#039;&#039;&#039;. 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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake --help-command-list, cmake --help-variable-list ja cmake --help-property-list&amp;lt;/span&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Cmake&amp;lt;/span&amp;gt;:n kotisivu on https://cmake.org/, josta löytyvät myös &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-dokumentaatio. Cmake:n avulla käytetään myös erilaisia testaus-/paketoimis-ja käännösjärjestelmiä, kuten &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;ctest, cpack, make, ninja&amp;lt;/span&amp;gt; jne. (joita muita kuin ctest:iä käytetään tässä esittelyssä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58347</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58347"/>
		<updated>2024-12-20T15:38:18Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Yleisesti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
== Yleisesti ==&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039;&amp;lt;/span&amp;gt; on työkalu, jolla voidaan tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;Makefile&#039;&#039;&#039;&amp;lt;/span&amp;gt;jä tai valmiita ohjelmistopaketteja. Se on siis &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;[[Make]]&amp;lt;/span&amp;gt;-käskyä nähden pykälän verran abstraktimpi taso ylöspäin. Cmake:lla voidaan mm. tehdä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;deb&amp;lt;/span&amp;gt;- ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;rpm&amp;lt;/span&amp;gt;-paketteja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cpack&amp;lt;/span&amp;gt;-apuohjelman avulla. Lisäksi sen avulla voidaan hallita &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;C/C++&amp;lt;/span&amp;gt; kirjastoja joko valmiiksi käännettyjä moduleita tai luoda omia dynaamisia moduleita. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&amp;lt;/span&amp;gt; on tiedosto, jonka perusteella cmake prosessoi ohjelmaprojektin. Ohjelmaprojekti voi olla esimerkiksi:testaus, ohjelman kääntäminen tai ohjelmapaketin luominen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedosto on siis yksi abstraktiotaso &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;:stä abstraktimpaanpäin. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;-tiedostot ovat käteviä erityisesti ohjelmoijille, jotka voivat niiden avulla automatisoida projektin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Makefile&amp;lt;/span&amp;gt;jen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58346</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58346"/>
		<updated>2024-12-20T15:34:05Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Yleistä tietoa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
== Yleisesti ==&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58345</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58345"/>
		<updated>2024-12-20T15:33:16Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* CMaken käytön kuvaus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
== Yleistä tietoa ==&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58344</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58344"/>
		<updated>2024-12-20T15:25:31Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen cmake-projekti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäinen rivi määrittelee, mikä &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;:n versio vähintään vaaditaan &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;:n suoritukseen. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Project&amp;lt;/span&amp;gt;-käskyllä määritellään projektin nimi, versio, kuvaus,kotisivu ja ohjelmointikielet. &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;Message&amp;lt;/span&amp;gt;-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ä: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;MAJOR.MINOR.PATCH.TWEAK&amp;lt;/span&amp;gt;)versionumeron. Niiden jälkeen kirjoitetaan projektin kuvaus (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_DESCRIPTION&amp;lt;/span&amp;gt;). Viimeisessä message-rivissä tulostuu projektin kotisivu (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;PROJECT_HOMEPAGE_URL&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Nyt voimme ”kääntää” projektimme, joten luomme projektin juureen kansion build, ja ajamme cmake-ohjelman sieltä osoitettuna alempaan kansioon. (&#039;&#039;&#039;HUOM&#039;&#039;&#039;: ainakin &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;cmake&amp;lt;/span&amp;gt;-paketti pitää olla asennettuna ennen ohjelman onnistunutta ajoa.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
Huomioitavaa on, ettei &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;make all&amp;lt;/span&amp;gt;-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 (&amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;VERSION, DESCRIPTION, HOMEPAGE_URL&amp;lt;/span&amp;gt; ja &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;LANGUAGES&amp;lt;/span&amp;gt;) on kirjoitettava suurilla kirjaimilla, jotta ne toimivat.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58343</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58343"/>
		<updated>2024-12-20T15:10:51Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen cmake-projekti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &amp;lt;span style = &amp;quot;font-family:monospace; background-color:lightgray;&amp;quot; &amp;gt;CMakeLists.txt&amp;lt;/span&amp;gt;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58341</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58341"/>
		<updated>2024-12-11T11:59:16Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi= https://github.com/retifrav/cmake-cpack-example?tab=GPL-3.0-1-ov-file | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debian-paketin luominen riippuvuuksien kanssa ==&lt;br /&gt;
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch LICENSE&lt;br /&gt;
touch README.md&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
touch cmake/Packing.cmake&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tähän sisällöksi:&lt;br /&gt;
&lt;br /&gt;
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
# -----------------------------------------------&lt;br /&gt;
# |                           OSUUS CPACK:IA VARTEN&lt;br /&gt;
# | Osuus kopioitu pitkälti:&lt;br /&gt;
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
#&lt;br /&gt;
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...&lt;br /&gt;
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.&lt;br /&gt;
&lt;br /&gt;
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.&lt;br /&gt;
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}&lt;br /&gt;
    CACHE STRING &amp;quot;The resulting package name&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}&lt;br /&gt;
    CACHE STRING &amp;quot;Package description for the package metadata&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
set(CPACK_PACKAGE_VENDOR &amp;quot;Joku Yritys&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_VERBATIM_VARIABLES YES)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})&lt;br /&gt;
SET(CPACK_OUTPUT_FILE_PREFIX &amp;quot;${CMAKE_SOURCE_DIR}/_packages&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# https://unix.stackexchange.com/a/11552/254512&lt;br /&gt;
#set(CPACK_PACKAGING_INSTALL_PREFIX &amp;quot;/opt/some&amp;quot;)#/${CMAKE_PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
# Tämä kommentoitiin, jotta paketti asennetaan &lt;br /&gt;
# oikeisiin hakemistoihin eikä:&lt;br /&gt;
# /opt/some-alikansioon.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})&lt;br /&gt;
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})&lt;br /&gt;
&lt;br /&gt;
set(CPACK_PACKAGE_CONTACT &amp;quot;YOUR@E-MAIL.net&amp;quot;)&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;YOUR NAME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RESOURCE_FILE_LICENSE &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/LICENSE&amp;quot;)&lt;br /&gt;
set(CPACK_RESOURCE_FILE_README &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/README.md&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# package name for deb. If set, then instead of &lt;br /&gt;
# some-application-0.9.2-Linux.deb&lt;br /&gt;
# you&#039;ll get some-application_0.9.2_amd64.deb &lt;br /&gt;
# (note the underscores too)&lt;br /&gt;
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)&lt;br /&gt;
# that is if you want every group to have its own package,&lt;br /&gt;
# although the same will happen if this is not set &lt;br /&gt;
# (so it defaults to ONE_PER_GROUP)&lt;br /&gt;
# and CPACK_DEB_COMPONENT_INSTALL is set to YES&lt;br /&gt;
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)&lt;br /&gt;
# without this you won&#039;t be able to pack only specified component&lt;br /&gt;
set(CPACK_DEB_COMPONENT_INSTALL YES)&lt;br /&gt;
&lt;br /&gt;
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS&lt;br /&gt;
    OWNER_READ OWNER_WRITE OWNER_EXECUTE&lt;br /&gt;
    GROUP_READ  GROUP_EXECUTE&lt;br /&gt;
    WORLD_READ WORLD_EXECUTE&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
#Määritellään debian-paketin riippuvuudet.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_DEPENDS &amp;quot;libc6 (&amp;gt;= 2.7-18), libboost-all-dev (&amp;gt;= 1.83)&amp;quot;)&lt;br /&gt;
#Määritellään riippuvuudet automaattisesti !!!&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)&lt;br /&gt;
#Määritellään rpm-paketin riippuvuudet.&lt;br /&gt;
#set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
set(CPACK_RPM_PACKAGE_REQUIRES &amp;quot;libboost_date_time_legacy &amp;gt;= 1.65&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
set(CPACK_RPM_PACKAGE_AUTOREQ YES)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.&lt;br /&gt;
&lt;br /&gt;
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=44&amp;gt;&lt;br /&gt;
include (&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello )&lt;br /&gt;
&lt;br /&gt;
# Deb-paketin ylläpitäjä eli paketin tekijä.&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;Peran&amp;quot;)&lt;br /&gt;
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_MODULE_PATH &amp;quot;${CMAKE_CURRENT_SOURCE_DIR}/cmake&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
include(&amp;quot;cmake/Packing.cmake&amp;quot;)&lt;br /&gt;
include(CPack)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58340</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58340"/>
		<updated>2024-12-11T11:31:02Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Minimalistisen RPM-paketin luomisen testaaminen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58339</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58339"/>
		<updated>2024-12-11T11:28:49Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Deb/rpm-paketin tekeminen cmake/cpack yhdistelmällä ==&lt;br /&gt;
&#039;&#039;&#039;Huom! Tämän sisältö on ottanut erittäin paljon vaikutteita näistä kahdesta artikkelista: &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87&lt;br /&gt;
&lt;br /&gt;
ja &#039;&#039;&#039;varsinkin&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/&lt;br /&gt;
&lt;br /&gt;
Jos englanti taipuu, niin kannattaa tutustua ainakin jälkimmäiseen, sillä kyseinen artikkeli on tätä artikkelia monipuolisempi.&lt;br /&gt;
&lt;br /&gt;
Ehkä lyhin tapa tehdä debian paketti (ilman riippuvuuksia) on lisätä CMakeLists.txt-tiedoston loppuun:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=29 &amp;gt;&lt;br /&gt;
# CPACK:n tarvitsemat käskyt&lt;br /&gt;
install(TARGETS hello ) # Tiedoston lisäys pakettiin.&lt;br /&gt;
&lt;br /&gt;
set(CPACK_DEBIAN_PACKAGE_MAINTAINER &amp;quot;peran&amp;quot;) # Paketin ylläpitäjä&lt;br /&gt;
&lt;br /&gt;
#Rpm-paketin myyjä, jonka laitoin samaksi kuin deb:n ylläpitäjä.&lt;br /&gt;
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})&lt;br /&gt;
&lt;br /&gt;
include(CPack) # Tiedot cpack-ohjelmalle.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen Debian-paketin luomisen testaaminen ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G DEB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt näemme ensimmäisen itse tekemäsi debian-paketin päätteen käskyllä !!!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
ls -l *.deb&lt;br /&gt;
-rw-rw-r-- cmaker cmaker 66416 joulu   9 18:19 eka-projekti-0.1.0-Linux.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Minimalistisen RPM-paketin luomisen testaaminen ==&lt;br /&gt;
(Debian pohjaisissa linuxeissa joutuu asentamaan rpm-paketin, jotta pystymme tehdä RPM-paketin. Samalla kannattaa asentaa rpmlint-paketti (&#039;&#039;&#039;sudo apt install rpm rpm-common rpmlint&#039;&#039;&#039;))&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
Mene build&#039;&#039;&#039;-hakemistoon päätteessä: (&#039;&#039;&#039;cd build&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
cpack -G RPM&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58338</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58338"/>
		<updated>2024-12-11T11:01:45Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ulkoisen kirjaston käyttäminen ==&lt;br /&gt;
&lt;br /&gt;
Ulkoisena testikirjastona käytämme boost-kirjastoa.&lt;br /&gt;
&lt;br /&gt;
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä ===&lt;br /&gt;
&lt;br /&gt;
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sudo apt install libboost-all-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.)&lt;br /&gt;
&lt;br /&gt;
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön ===&lt;br /&gt;
&lt;br /&gt;
Muokkaamme CMakeLists.txt-tiedoston riviä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=28 &amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line start=20 &amp;gt;&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
find_package(boost_date_time REQUIRED)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
target_link_libraries(hello mylib boost_date_time)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projektiin lisättävät rivit ===&lt;br /&gt;
Pääohjelmaan src/hello.cpp on lisättävä include rivi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line start=4 &amp;gt;&lt;br /&gt;
#include  &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ja ajan tulostamisrivit ohjelman loppupuolelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line Start=21&amp;gt;&lt;br /&gt;
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++ line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]),atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    boost::posix_time::ptime time = boost::posix_time::second_clock::local_time();&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Aika on &amp;quot; &amp;lt;&amp;lt; time &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ohjelman kääntäminen ja koeajaminen ===&lt;br /&gt;
&lt;br /&gt;
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma ajetaan tutulla käskyllä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Käsky tulostaa jotain seuraavaa...&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
Aika on 2024-Dec-04 20:10:41&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58337</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58337"/>
		<updated>2024-12-10T10:07:32Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
C++/C-ohjelmalle mallin luominen cmake:n ja CMakeLists.txt:n avulla. Ensimmäisessä esimerkissämme tulostimme message-käskyllä projektin tiedot tulostusjonoon. Nyt lisäämme kyseiset tiedot ohjelmamme lähdekoodeihin, jotka sitten tulostamme ajettavassa ohjelmassa.&lt;br /&gt;
Luomme projektimme juureen cmakemallit-kansion, johon kirjoitamme cmake-kielellä pohjan käännettäävää ohjelmaa varten. Annamme tiedostonnimeksi asetukset.cmake.&lt;br /&gt;
&lt;br /&gt;
Luo projektikansiomme juureen cmake-kansio, johon luo config.h.cmake-tiedosto. Siihen kirjoita seuraava sisältö:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
#ifndef CONFIG_H&lt;br /&gt;
#define CONFIG_H&lt;br /&gt;
&lt;br /&gt;
#define PROJECT &amp;quot;@PROJECT_NAME@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION &amp;quot;@PROJECT_VERSION@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MAJOR &amp;quot;@PROJECT_VERSION_MAJOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_MINOR &amp;quot;@PROJECT_VERSION_MINOR@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_PATCH &amp;quot;@PROJECT_VERSION_PATCH@&amp;quot;&lt;br /&gt;
#define PROJECT_VERSION_TWEAK &amp;quot;@PROJECT_VERSION_TWEAK@&amp;quot;&lt;br /&gt;
#define PROJECT_HOMEPAGE_URL &amp;quot;@PROJECT_HOMEPAGE_URL@&amp;quot;&lt;br /&gt;
#define PROJECT_DESCRIPTION &amp;quot;@PROJECT_DESCRIPTION@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Malli on siis lähes samanlainen kuin puhdaskin C-otsaketiedosto. ”@...@”-välissä määritellyn cmake-muuttujan cmake muuttaa saman muuttujan arvoksi ennen C-kielisen ohjelman kääntämistä. Nämä ovat siis samat arvot kuin CMakeLists.txt-tiedoston message-käskyllä annetuissa muuttujissa.&lt;br /&gt;
Tosin CMakeLists.txt-tiedostoon pitää lisätä käsky, jotta cmake osaa kirjoittaa header-tiedoston oikealla nimellä oikeaan paikkaan. Käsky, joka pitää lisätä on configure_file, ja tarkemmin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=21&amp;gt;&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
se pidän loogisena, että sen paikka on ennen add_executable-käskyä, mutta se saattaa toimia myös sen jälkeen. Tämän muutoksen jälkeen CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan lainen …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Elikkä configure_file-käskyllä lisätään config.h.cmake-tiedoston ohjeiden mukaisesti projektin tiedot C-ystävälliseen muotoon #define-käskyjen muodossa. ${CMAKE_SOURCE_DIR} on lähdekoodin polku, /cmake/config.h.cmake-on lähdekoodipolussa olevan tiedoston nimi. /src/config.h on lähdekoodin (koko)polku, jonne asetustiedosto (config.h) lisätään.&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voit testata onnistuuko kääntäminen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kääntämisen jälkeen ./hello-ohjelman pitäisi toimia samalla tavalla kuin ennen, mutta jos huomaat, niin projektin src-hakemistoon ilmestyi uusi config.h-tiedosto. Jotta saisimme konkreettista hyötyä mallitiedostosta, niin sen generoima otsaketiedosto kannattaa lisätä hello.cpp ohjelmaan #include-käskyllä: #include ”config.h”. Tämän jälkeen hello.cpp-tiedostomme on siis seuraavan mukainen…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    return 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiedosto puu (ilman build-kansiota) on seuraavannäköinen…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
$ tree cmakeprojekti&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&lt;br /&gt;
3 directories, 4 files&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin koeajaa ohjelman:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
./hello:n pitäisi tulostaa seuraavaa…&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
eka-projekti&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmäinen cmake-projektini&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman kirjaston lisääminen (.h) ==&lt;br /&gt;
Cmake:lla voi määritellä ja kääntää omia kirjastoja joko lähdeohjelmien kanssa tai pelkän käännöksen ja otsaketiedostojen (.h) avulla. Lisäämme itse tekemämme kirjaston, joka palauttaa liukulukujen välisen kertolaskun tuloksen palautteena.&lt;br /&gt;
&lt;br /&gt;
Siispä lisäämme lib-hakemiston kirjaston lähdekoodia varten ja include-hakemiston otsaketiedostoja varten. Päätteellä se tapahtuu seuraavalla tavalla, mikäli olet päätteellä projektin build-hakemistossa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
mkdir ../lib;touch ../lib/mylib.cpp&lt;br /&gt;
mkdir ../include;touch ../include/mylib.h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen projektin hakemistopuu näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── build&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kirjoita mylib.h-tiedostoon seuraavanlainen otsaketiedosto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#ifndef MYLIB_H&lt;br /&gt;
#define MYLIB_H&lt;br /&gt;
double multiply(double v1,double v2);&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vastaavasti kirjoita mylib.cpp-tiedostoon seuraavanlainen ohjelmasisältö:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C line &amp;gt;&lt;br /&gt;
#include &amp;quot;mylib.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
double multiply(double v1,double v2) { &lt;br /&gt;
    // multiply-funktion toteutus.&lt;br /&gt;
    // Palauttaa v1:n ja v2:n välisen kertolaskun tuloksen.&lt;br /&gt;
    return v1*v2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jotta voimme testata ohjelman toimintaa, niin meidän pitää tehdä muutoksia (hello.cpp) pääohjelmaamme. Lisäämme #include &amp;lt;mylib.h&amp;gt; ja rivit ohjelman testaamista varten.&lt;br /&gt;
&lt;br /&gt;
Muutosten jälkeen hello.cpp-näyttää tällaiselta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C++ line &amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#include &amp;lt;mylib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; PROJECT;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MAJOR ;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_MINOR;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_PATCH;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_VERSION_TWEAK;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_HOMEPAGE_URL;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; PROJECT_DESCRIPTION;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(3,5);&lt;br /&gt;
    if(args&amp;gt;2) {&lt;br /&gt;
      std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot; &amp;lt;&amp;lt; multiply(atof(argv[1]) ,atof(argv[2]));&lt;br /&gt;
    }&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huomioi uudet rivit: 3,15-18 !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Edelliseen verrattuna ohjelmaan on tullut uusi #include-rivi #include-rivien viimeiseksi, jossa otetaan käyttöön oma tekemä mylib-kirjasto. Sen lisäksi mylib-kirjastossa olevaa multiply-funktiota testataan vakioilla, ja jos ohjelmalle syötetään parametreja kaksi tai enemmän, niin ohjelma yrittää muuttaa niistä kahta ensimmäista numeroksi ja kertoa ne keskenään. Muutokset ovat korostettu keltaisella taustavärillä.&lt;br /&gt;
&lt;br /&gt;
Tämän osion lopuksi teemme tarvittavat muutokset CMakeLists.txt-tiedostoon, tiedostoon lisätään seuraavat rivit configure_file-käskyn jälkeen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=Cmake line start=22 &amp;gt;&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_library-käskyllä lisätään projektiin mylib.cpp-kirjasto käännettäväksi, ja target_include_directories-käskyllä laitetaan include-hakemisto näkyväksi C/C++-kääntäjälle, josta kääntäjä osaa hakea (.h) header-tiedostot.&lt;br /&gt;
CMakeLists.txt-tiedoston loppuun lisätään vielä rivi, jolla kirjasto linkitetään projektin hello.cpp-ohjelmaan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line Start=28&amp;gt;&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=CMake line &amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h)&lt;br /&gt;
&lt;br /&gt;
add_library(mylib lib/mylib.cpp)&lt;br /&gt;
target_include_directories(mylib PUBLIC include)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
target_link_libraries(hello mylib )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oman hello-ohjelman uusien ominaisuuksien kokeilu ==&lt;br /&gt;
Ensin käännetään ohjelma:&lt;br /&gt;
Mene päätteellä projektin juureen, ja suorita alla olevat käskyt. (Sinun tulee tietää, mitä käskyt tekevät, koska väärässä kansiossa annettuna nämä käskyt saattavat tehdä arvaamatonta tuhoa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line &amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Suoritusten jälkeen sinulla pitäisi olla valmiiksi käännettynä hello-ohjelma, jota voit testata esimerkiksi seuraavalla tavalla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
./hello 5 9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelma tulostaneen seuraavan kaltaista:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
eka-projekti&lt;br /&gt;
0.1.0.2&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
https://linux.fi&lt;br /&gt;
Ensimmainen cmake-projektini&lt;br /&gt;
15&lt;br /&gt;
45&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tällä hetkellä puun pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
cmakeprojekti&lt;br /&gt;
├── cmake&lt;br /&gt;
│   └── config.h.cmake&lt;br /&gt;
├── CMakeLists.txt&lt;br /&gt;
├── include&lt;br /&gt;
│   └── mylib.h&lt;br /&gt;
├── lib&lt;br /&gt;
│   └── mylib.cpp&lt;br /&gt;
└── src&lt;br /&gt;
    ├── config.h&lt;br /&gt;
    └── hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58336</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58336"/>
		<updated>2024-12-10T08:59:05Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
== Cmake-ohjelman mallien käyttäminen ==&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58335</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58335"/>
		<updated>2024-12-10T08:57:35Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen C/C++ ohjelma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt voimmekin ajaa cmake ja make all -ohjelmat build-hakemistostamme eli päätteessä (varmuuden vuoksi tässä poistetaan aiemmin luotu build-kansion sisältö. Todennäköisesti mkdir build antaa virheilmoituksen, kun kyseinen hakemisto on jo olemassa):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
rm -r *&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komentosarjan pitäisi olla vastaavaa kuin tämä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
-- The C compiler identification is GNU 13.2.0&lt;br /&gt;
-- The CXX compiler identification is GNU 13.2.0&lt;br /&gt;
-- Detecting C compiler ABI info&lt;br /&gt;
-- Detecting C compiler ABI info - done&lt;br /&gt;
-- Check for working C compiler: /usr/bin/cc - skipped&lt;br /&gt;
-- Detecting C compile features&lt;br /&gt;
-- Detecting C compile features - done&lt;br /&gt;
-- Detecting CXX compiler ABI info&lt;br /&gt;
-- Detecting CXX compiler ABI info - done&lt;br /&gt;
-- Check for working CXX compiler: /usr/bin/c++ - skipped&lt;br /&gt;
-- Detecting CXX compile features&lt;br /&gt;
-- Detecting CXX compile features - done&lt;br /&gt;
eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
Projektin versio on 0.1.0.2&lt;br /&gt;
Se koostuu neljästä osasta:&lt;br /&gt;
0&lt;br /&gt;
1&lt;br /&gt;
0&lt;br /&gt;
2&lt;br /&gt;
Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
-- Configuring done (0.6s)&lt;br /&gt;
-- Generating done (0.0s)&lt;br /&gt;
-- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sitten cmake-ohjelman ajamisen jälkeen ajamme make-ohjelman (make all).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash &amp;gt;&lt;br /&gt;
make all&lt;br /&gt;
[ 50%] Building CXX object CMakeFiles/hello.dir/src/hello.cpp.o&lt;br /&gt;
[100%] Linking CXX executable hello&lt;br /&gt;
[100%] Built target hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyt ohjelma on käännetty, ja sen pitäisi tulostaa seuraavaa, kun ohjelman ajaa...&lt;br /&gt;
 ./hello&lt;br /&gt;
 ohjelman ajotiedoston nimi hakemistopolkuineen on ./hello&lt;br /&gt;
&lt;br /&gt;
Vielä emme siis ole päässeet nauttimaan cmake:n erityisen hienoista ominaisuuksista, mutta ensimmäisen C/C++-ohjelman onnistuimme kuitenkin kääntää ajettavaksi ohjelmaksi.&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58334</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58334"/>
		<updated>2024-12-10T07:09:39Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen C/C++ ohjelma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=21&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58333</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58333"/>
		<updated>2024-12-10T07:05:13Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen C/C++ ohjelma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line Start=20&amp;gt;&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisäyksen jälkeen CMakeLists.txt-tiedoston pitäisi näyttää tältä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cmake line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
&lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58332</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58332"/>
		<updated>2024-12-10T07:01:23Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen C/C++ ohjelma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line Start=20&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58331</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58331"/>
		<updated>2024-12-10T06:59:52Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen C/C++ ohjelma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
Seuraavaksi voimmekin tehdä ensimmäisen käännettävän C/C++-ohjelman. Se kirjoitetaan oikeaoppisesti src-alikansioon, joten teemme sille projektikansiomme juureen uuden kansion.&lt;br /&gt;
Päätteellä voisi kirjoittaa seuraavaa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
cd ..&lt;br /&gt;
mkdir src&lt;br /&gt;
touch src/hello.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensimmäisessä rivissä siirrymme build-kansiosta projektin juurikansioon. Luomme sen alle src-kansion, jossa on hyvä pitää projektimme C/C++-lähdetiedostoja.&lt;br /&gt;
&lt;br /&gt;
Kirjoita äsken src-hakemistoon luotuun hello.cpp-ohjelmaan seuraavan (Esimerkin) sisältö, ja tallenna se.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C++&amp;quot; line&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main(int args,char **argv) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;ohjelman ajotiedoston nimi hakemistopolkuineen on &amp;quot; &amp;lt;&amp;lt; argv[0] &amp;lt;&amp;lt; &amp;quot;\n&amp;quot;;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman voi kääntää käskyllä build-kansiostamme:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
cd build&lt;br /&gt;
g++ ../src/hello.cpp -o hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman ajaminen tapahtuu seuraavasti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
 ./hello&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seuraavaksi menemme takaisin build-kansioon, ja poistamme cmake:n tekemät tiedostot rm -r -käskyllä (varovasti rm -r käskyn kanssa, sillä se voi tuhota pahimmassa tapauksessa koko käyttäjän kotikansion, ja root-käyttäjänä se voi tuhota koko järjestelmän.).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line&amp;gt;&lt;br /&gt;
d ..&lt;br /&gt;
rm -r build&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Huomaa, että edelleenkin ohjelmat (cmake ja make) suoriutuvat toimistaan ilman virheilmoituksia, mutta edelleenkään tuotoksena ei tule käänettyä ohjelmaa.&lt;br /&gt;
&lt;br /&gt;
Ajamisen jälkeen huomaamme, ettei cmake-käännä ohjelmaa, vaan se toimii edelleen samalla tavalla kuin aiemminkin eli tulostaa eka-projekti:n tiedot.&lt;br /&gt;
Jotta saadaksemme cmake:n kääntämään ohjelman pitää meidän tehdä pieniä muutoksia. Lisäämme seuraavanlaisen rivin aikaisemmin luomamme CMakeLists.txt-tiedoston loppuun: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash line StartLine=30&amp;gt;&lt;br /&gt;
add_executable(&amp;quot;hello&amp;quot; &amp;quot;src/hello.cpp&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58330</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58330"/>
		<updated>2024-12-10T06:48:34Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen cmake-projekti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir cmakeprojekti&lt;br /&gt;
cd cmakeprojekti&lt;br /&gt;
touch CMakeLists.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58329</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58329"/>
		<updated>2024-12-10T06:47:05Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
 mkdir cmakeprojekti&lt;br /&gt;
 cd cmakeprojekti&lt;br /&gt;
 touch CMakeLists.txt&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot; line&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
 &lt;br /&gt;
message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58328</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58328"/>
		<updated>2024-12-10T06:24:36Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
 mkdir cmakeprojekti&lt;br /&gt;
 cd cmakeprojekti&lt;br /&gt;
 touch CMakeLists.txt&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
 cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
 project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
 message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
 message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
 message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
 message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
 message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
 mkdir build&lt;br /&gt;
 cd build&lt;br /&gt;
 cmake ..&lt;br /&gt;
 make all&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen C/C++ ohjelma ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58327</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58327"/>
		<updated>2024-12-10T06:22:15Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ensimmäinen cmake-projekti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
 mkdir cmakeprojekti&lt;br /&gt;
 cd cmakeprojekti&lt;br /&gt;
 touch CMakeLists.txt&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
 cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
 project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
 message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
 message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
 message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
 message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
 message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
 mkdir build&lt;br /&gt;
 cd build&lt;br /&gt;
 cmake ..&lt;br /&gt;
 make all&lt;br /&gt;
Ohjelman pitäisi tulostaa seuraavaa…&lt;br /&gt;
 eka-projekti on ensimmäinen projektimme, ja tässä on sen tiedot:&lt;br /&gt;
 Projektin versio on 0.1.0.2&lt;br /&gt;
 Se koostuu neljästä osasta:&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
 Projektimme kuvaus on:Ensimmainen cmake-projektini&lt;br /&gt;
 Kotisivuksi olemme määritelleet tutun https://linux.fi.&lt;br /&gt;
 -- Configuring done (0.0s)&lt;br /&gt;
 -- Generating done (0.0s)&lt;br /&gt;
 -- Build files have been written to: /home/.../cmakeprojekti/build&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58326</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58326"/>
		<updated>2024-12-10T06:19:28Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
 mkdir cmakeprojekti&lt;br /&gt;
 cd cmakeprojekti&lt;br /&gt;
 touch CMakeLists.txt&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
 cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
 project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
 message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
 message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
 message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
 message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
 message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
 mkdir build&lt;br /&gt;
 cd build&lt;br /&gt;
 cmake ..&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58325</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58325"/>
		<updated>2024-12-10T06:16:13Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: &#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039;&lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
 mkdir cmakeprojekti&lt;br /&gt;
 cd cmakeprojekti&lt;br /&gt;
 touch CMakeLists.txt&lt;br /&gt;
Kirjoita tiedostoon seuraavat rivit:&lt;br /&gt;
 cmake_minimum_required(VERSION 3.21)&lt;br /&gt;
 &lt;br /&gt;
 project(&lt;br /&gt;
    &amp;quot;eka-projekti&amp;quot;&lt;br /&gt;
    VERSION 0.1.0.2&lt;br /&gt;
    DESCRIPTION &amp;quot;Ensimmainen cmake-projektini&amp;quot;&lt;br /&gt;
    HOMEPAGE_URL &amp;quot;https://linux.fi&amp;quot;&lt;br /&gt;
    LANGUAGES &amp;quot;C&amp;quot; &amp;quot;CXX&amp;quot;&lt;br /&gt;
 )&lt;br /&gt;
 &lt;br /&gt;
 message(&amp;quot;${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Projektin versio on ${PROJECT_VERSION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Se koostuu neljästä osasta:&amp;quot;)&lt;br /&gt;
 message(${PROJECT_VERSION_MAJOR})&lt;br /&gt;
 message(${PROJECT_VERSION_MINOR})&lt;br /&gt;
 message(${PROJECT_VERSION_PATCH})&lt;br /&gt;
 message(${PROJECT_VERSION_TWEAK})&lt;br /&gt;
 message(&amp;quot;Projektimme kuvaus on:${PROJECT_DESCRIPTION}&amp;quot;)&lt;br /&gt;
 message(&amp;quot;Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58324</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58324"/>
		<updated>2024-12-10T06:12:46Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
make:n avulla pienen projektin kääntäminen: &lt;br /&gt;
Luo kansio cmakeprojekti, ja sinne tiedosto: CMakeLists.txt &lt;br /&gt;
Esim. päätteellä:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58323</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58323"/>
		<updated>2024-12-10T06:08:01Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
=CMaken käytön kuvaus=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on työkalu, jolla voidaan tehdä &#039;&#039;&#039;Makefile&#039;&#039;&#039;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. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMakeLists.txt&#039;&#039;&#039; 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 Makefilejen ja ohjelmapakettien avulla.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ä).&lt;br /&gt;
&lt;br /&gt;
== Ensimmäinen cmake-projekti ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58322</id>
		<title>CMakeSyvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58322"/>
		<updated>2024-12-10T05:52:02Z</updated>

		<summary type="html">&lt;p&gt;Peran: Ak: Sivu tyhjennettiin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58321</id>
		<title>CMake syvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMake_syvemmin&amp;diff=58321"/>
		<updated>2024-12-10T05:51:25Z</updated>

		<summary type="html">&lt;p&gt;Peran: Ak: Uusi sivu: {{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}  &amp;#039;&amp;#039;&amp;#039;CMake&amp;#039;&amp;#039;&amp;#039; on usealla alustalla toimiva käännösjärjestelmä. Se on käytössä muun muassa KDE-projektissa.  ==Käyttö== Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento  cmake . Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia:   cmake -D&amp;lt;muuttu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on usealla alustalla toimiva käännösjärjestelmä. Se on käytössä muun muassa [[KDE|KDE-projektissa]].&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58320</id>
		<title>CMakeSyvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58320"/>
		<updated>2024-12-10T05:47:32Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[CMake]]&#039;&#039;&#039; on usealla alustalla toimiva käännösjärjestelmä. Se on käytössä muun muassa [[KDE|KDE-projektissa]].&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[CMake]]&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58319</id>
		<title>CMakeSyvemmin</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=CMakeSyvemmin&amp;diff=58319"/>
		<updated>2024-12-10T05:42:52Z</updated>

		<summary type="html">&lt;p&gt;Peran: Uusi sivu Cmaken syvempää esittelyä varten&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMake&#039;&#039;&#039; on usealla alustalla toimiva käännösjärjestelmä. Se on käytössä muun muassa [[KDE|KDE-projektissa]].&lt;br /&gt;
&lt;br /&gt;
==Käyttö==&lt;br /&gt;
Yleensä projekti käännetään ajamalla sen lähdekoodihakemistossa komento&lt;br /&gt;
 cmake .&lt;br /&gt;
Käännösprosessia voi ohjata määrittelemällä -D-valitsimella käännöstä ohjaavia muuttujia: &lt;br /&gt;
 cmake -D&amp;lt;muuttuja&amp;gt;=arvo&lt;br /&gt;
Esimerkiksi [[gcc|g++]]:n käännösvalitsimiin voi vaikuttaa muuttujalla &amp;lt;tt&amp;gt;CMAKE_CXX_FLAGS&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 cmake -DCMAKE_CXX_FLAGS=&amp;quot;-g -O2&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen CMake yleensä luo [[Makefile|Makefilen]], jonka avulla ohjelma voidaan asentaa tyypillisesti komennolla&lt;br /&gt;
 [[make]] all install&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Make]]&lt;br /&gt;
*[[Autotools]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Kehitystyökalut]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=54088</id>
		<title>Linux.fi:Kahvihuone</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=54088"/>
		<updated>2021-10-24T11:46:57Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kahvihuoneen tarkoitus on keskustella [[Linux.fi]]-wikistä. [https://foorumi.linux.fi Foorumissa] saa jutella kaikesta mikä liittyy [[Linux]]iin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HUOM!&#039;&#039;&#039; Lisääthän uudet keskusteluaiheet kahvihuoneen alkuun, niin sivu pysyy selkeämpänä. Hyvän tavan mukaista on myös käyttää &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt; -merkintää viestien lopussa, jotta kirjoittaja ja kirjoitusaika jäisivät selvemmin esille. &lt;br /&gt;
&lt;br /&gt;
Allaolevat linkit johtavat keskusteluarkistoihin.&lt;br /&gt;
*[[Linux.fi:Kahvihuone/Arkisto|Arkisto 1]]&lt;br /&gt;
*[[Linux.fi:Kahvihuone/Arkisto2|Arkisto 2]]&lt;br /&gt;
&lt;br /&gt;
== Hei päivitin muutamia peliohjaimiin viittaavia sivuja ==&lt;br /&gt;
... ja toivoisin jonkun katsovan niiden oikeellisuudesta. Taitaa olla 10 vuotta tai jopa enemmän, kun viime kerralla päivitin, niin se ei välttämättä mennyt niin kuin Strömsöössä. Lähde on Ubuntufoorumissa: https://forum.ubuntu-fi.org/index.php?topic=56765.msg433945&lt;br /&gt;
Tosin vähän yleistin niitä. Lisäksi lisäsin Laitteisiin peliohjaimet ([[Portaali:Laitteisto]])-sivulle. Tein myös uuden sivun [[Peliohjaimen kalibrointi]], joka nimensä mukaisesti kertoo, kuinka kalibroidaan peliohjain. Sinne löytää [[Peliohjaimet]]-sivulta. Pitäisikö nämä sivut yhdistää, vai onko hyvä näin, kuten ne on tehty ? --[[Käyttäjä:Peran|Peran]] ([[Keskustelu käyttäjästä:Peran|keskustelu]]) 24. lokakuuta 2021 kello 14.46 (EEST)&lt;br /&gt;
::Peliohjaimistakin on paljon asiaa, jos vain yhtään syvällisemmin alkaa kirjoittamaan, joten ihan hyvä, että oma artikkeli kalibroinnillekin. Kattavaa ajantasalla olevaa tietoa peliohjaimista yleensä ottaen löytyy ArchWikin [[archwiki:Gamepad|Gamepad]]-artikkelista, jonka tietojen pitäisi päteä useimpiin jakeluihin. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 24. lokakuuta 2021 kello 13.47 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Jakelu-mallineen sukulaisjakelut-kohta ==&lt;br /&gt;
Useimpien jakeluiden artikkeleiden yhteydestä on jo pitemmän aikaa löytynyt ns. jakelu-sarjamalline, esim. [[Malline:Debian|Debian]], jossa yleensä listataan tunnetuimpia artikkelin jakeluun liittyviä muita jakeluita. Joten ehdotukseni/kysymykseni on seuraava, mitä mieltä ollaan siitä, olisiko soveliasta poistaa [[Malline:Jakelu|Jakelu]]-mallineesta sukulaisjakelut-kohta, koska ns. &amp;quot;sukulaisia&amp;quot; tuppaa olemaan suunnaton määrä kun vähän syvemmältä tutkii. Näin tarvitsisi ainoastaan keskittyä jakeluperheen sarjamallineen ajan tasalla pitoon, eikä jakelu-artikkeleihin jäisi epämääräistä, loppupeleissä kahta päällekkäistä dataa sisältävää osiota. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 5. syyskuuta 2021 kello 17.55 (EEST)&lt;br /&gt;
:[[Malline:Jakelu|Jakelu]]-mallineesta poistettu kohta sukulaisjakelut, mutta [[:Luokka:Jakelut|Luokka:Jakelut]] artikkeleihin jää aiemmin merkityt sukulaisjakelut-kohdat kuitenkin. Nämä voi poistaa / putsata mahdollisuuksien mukaan, ja päivittää jakeluiden sarjamallineita, jos niissä puutteita ilmenee. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 10. syyskuuta 2021 kello 13.34 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Rekisteröimättömien muokkaukset == &lt;br /&gt;
Toistuvien ilkivaltatapausten vuoksi rekisteröimättömien käyttäjien muokkaukset on toistaiseksi estetty. Asiallisia muokkauksia on muutenkin tehty aika vähän ilman käyttäjätiliä, jospa tästä ei siis aiheutuisi kohtuutonta vaivaa. Kiitos wikin tekijöille ja mukavaa loppukesää! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 15. elokuuta 2021 kello 15.57 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Foorumin kirjautuminen ==&lt;br /&gt;
Foorumin kirjautuminen taitaa taas olla rikki kun ei pääse tunnuksilla taaskaan sisään. Pääsin ainoastaan taas sisään vain Githubin tunnareilla, jotka eivät ole tietenkään samat. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 17. joulukuuta 2020 kello 23.10 (EET)&lt;br /&gt;
:Korjaantunut tai ohi mennyt, kolmella eri selaimella toimii minulla. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 18. joulukuuta 2020 kello 17.13 (EET)&lt;br /&gt;
&lt;br /&gt;
== Henkilökohtainen CSS ==&lt;br /&gt;
[[Käyttäjä:LinuxMan/css|Mokasinko pahasti tyylittelyssäni]], vai onko käyttäjäkohtainen CSS kiellettyä? --&amp;lt;small&amp;gt;[[Käyttäjä:LinuxMan|LinuxMan]] + [[Käyttäjä:LinuxMan/Chat|chat]]&amp;lt;/small&amp;gt; 12. marraskuuta 2020 kello 10.29 (EET)&lt;br /&gt;
&lt;br /&gt;
== Väärinkäyttöloki ei toimi ==&lt;br /&gt;
 [064aa995a537ddeecafaaa67] 2020-11-02 12:29:15: Vakava virhe, jonka tyyppi on ”Wikimedia\Rdbms\DBQueryError”&lt;br /&gt;
Tämän voisi korjata. --[[Käyttäjä:LinuxMan|LinuxMan]] tai [[Käyttäjä:LinuxMan/Chat|&amp;lt;small&amp;gt;chat&amp;lt;/small&amp;gt;]] 2. marraskuuta 2020 kello 14.30 (EET)&lt;br /&gt;
:Hups, tämä on jäänyt minulta huomaamatta. Ei äkkiseltään selvinnyt mistä tämä aiheutuu, mutta pitääpä korjata kun ehtii. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 16. maaliskuuta 2021 kello 22.49 (EET)&lt;br /&gt;
::No nyt toimii. Jostain syystä yksi olennainen tietokantamigraatio oli jäänyt ajamatta, vaikka niiden pitäisi pyörähdellä automaattisesti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 17. maaliskuuta 2021 kello 16.37 (EET)&lt;br /&gt;
&lt;br /&gt;
== Kölnin sininen ei toimi ==&lt;br /&gt;
Ulkoasu Kölnin sininen antaa vastaukseksi tyhjyyden. Minun piti itse kirjoittaa Asetukset-sivun osoitteeseen &#039;&#039;?useskin=vector&#039;&#039; jotta pääsisin pois valkoisesta ruudusta. --[[Käyttäjä:LinuxMan|LinuxMan]] tai [[Keskustelu käyttäjästä:LinuxMan|&amp;lt;small&amp;gt;keskustelu&amp;lt;/small&amp;gt;]] 8. lokakuuta 2020 kello 17.08 (EEST)&lt;br /&gt;
:Otin sen pois, ja laitoin Vectorin oletukseksi... Ainakin oma profiilini käytti vielä Monobook-teemaa, joka oli aika vanhahtava. Harkinnassa on, jos asentaisi jonkun [https://www.mediawiki.org/wiki/Category:Skins_based_on_Bootstrap nykyaikaisen teeman]. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 30. lokakuuta 2020 kello 13.47 (EET)&lt;br /&gt;
&lt;br /&gt;
== Mobiiliystävällinen ulkoasu ==&lt;br /&gt;
Maakuth ilmoitti foorumien puolella, että Wikiin on asennettu MobileFrontend-lisäosa (https://foorumi.linux.fi/t/mobiiliystavallinen-ulkoasu/2491) Suurin osa ulkoasusta toimii automaattisesti, mutta jotkin osat ovat rikki.&lt;br /&gt;
Ajattelin, että tähän alle voitaisiin tehdä lista sivuista ja mallineista, joilla on ongelmia mobiilinäkymän kanssa.&lt;br /&gt;
--[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 4. tammikuuta 2019 kello 21.16 (EET)&lt;br /&gt;
* [[Vice]]&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia ==&lt;br /&gt;
Tulee sisäinen virhe aina kun yrittää päivittää vanhaa kuvaa uudeksi tai yleensä yrittää tallentaa uutta kuvaa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Sisäinen virhe&lt;br /&gt;
[3a911fe5f0b289c4dbc01057] 2018-12-19 18:38:38: Vakava virhe, jonka tyyppi on &amp;quot;TypeError&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
--[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 19. joulukuuta 2018 kello 20.45 (EET)&lt;br /&gt;
:Korjattu, kyse oli roskapostintorjuntalisäosan yhteensopivuusongelmasta. Kiitos ilmoituksesta! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 21. joulukuuta 2018 kello 09.00 (EET)&lt;br /&gt;
&lt;br /&gt;
== Vastustaako joku palvelinpuolen artikkeleiden kasvonkohotusta? ==&lt;br /&gt;
Huomasin, että tässä wikissä palvelimia koskeva tieto on hajallaan ja osin vanhentunutta.&lt;br /&gt;
&lt;br /&gt;
Vastustaako joku, jos muokkaan https://www.linux.fi/wiki/Palvelin -sivun ympärille etäpalvelinten hallintaa koskevan kokonaisuuden? Käyn läpi tyypillisiä palvelinpuolen sovelluksia, ajantasaistan niiden ohjeita.&lt;br /&gt;
Päivitin yhden artikkelin esimerkiksi: https://www.linux.fi/wiki/Apache_httpd&lt;br /&gt;
Artikkelissa on tehty seuraavat valinnat:&lt;br /&gt;
* käsitellään lähinnä Red Hat- ja Debian-pohjaisten palvelinten asetuksia. Muut jakelut jäävät paitsioon.&lt;br /&gt;
* prosessit hallitaan käyttäen systemd:tä - muihin tapoihin ei selkeyden vuoksi viitata.&lt;br /&gt;
* keskitytään ennen muuta siihen, mistä ohjelma löytyy järjestelmässä asentamisen jälkeen. Konfiguraatiovinkkejä on vähemmän.&lt;br /&gt;
* Pidetään mukana vanha, vähän outokin tauhka, kuten sähköisellä kortilla kirjautumisen mahdollistaminen. Monikohan tuota nykyään tekee?&lt;br /&gt;
&lt;br /&gt;
Kritiikkiä, huomioita tms näitä valintoja kohtaan?&lt;br /&gt;
&lt;br /&gt;
Siis: Kyllä palvelimen pystyttämiseen ja konfiguroimiseen tarvittava informaatio wikissä on, mutta se pitäisi koota paremmin yhteen. Nyt wikin näkökulma on voittopuolisesti omamme; Linuxia työpöytäjakeluna käyttävien ihmisten tietolähde. Haluaisin luoda Wikiin tulokulman, miten Windows- tai Mac-koneelta etänä kirjautuva voi järjestelmää käyttää. Eli lähinnä komentoriviltä käsin tapahtuvaa järjestelmän hallintaa. Se ehkä madaltaisi kynnystä tutustua järjestelmään muutenkin :)&lt;br /&gt;
--[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 13. marraskuuta 2018 kello 12.04 (EET)&lt;br /&gt;
&lt;br /&gt;
: Kyllä, ehdottomasti ainakin minun puolestani voi tehdä. Mielestäni wikin tarkoitus ei ole tosiaan kilpailla manuaalisivujen kanssa, vaan nimenomaan sisältää isompia hyödyllisiä kokonaisuuksia. Debian ja Red Hat on hyviä jakeluita tuon aiheen käsittelyyn, koska ne on suosituimmat palvelinjakelut. Samasta syystä muiden init järjestelmien, kuin systemd:n käsittelyn voi jättää pois.&lt;br /&gt;
: Pääasia on, ettei poista mitään tärkeää, koska joku voi tarvita juuri sitä tietoa. Toki olemassa olevia artikkeleita voi refaktoroida aina. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 13. marraskuuta 2018 kello 15.27 (EET)&lt;br /&gt;
&lt;br /&gt;
:: Palvelin-sivulle on nyt tehty kasvojen kohotus. Artikkeli muutettu käsittelemään palvelimen pystyttämistä. Mielipiteitä tästä?&lt;br /&gt;
::*[[Palvelin]]&lt;br /&gt;
::Haparoin tässä hiljalleen suuntaa, jonka pohjalta palvelinta käsitteleviä artikkeleita alan kehittää. Mietin mielessäni, miten järjestelmän perushallintaa käsittelevät artikkelit saisi luontevasti kokonaisuuden osaksi? Ne eivät kuulu pelkästään Palvelin-teeman alle. --[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 27. marraskuuta 2018 kello 11.32 (EET)&lt;br /&gt;
&lt;br /&gt;
::: Hyvältähän tuo näyttää. Malline on vaikuttaa ihan hyvältä ratkaisulta, koska sillä saa nätisti nivottua artikkelit yhteen. Ei se haittaa, vaikka Palvelin-mallineen alla olisi &amp;quot;geneerisiä&amp;quot; artikkeleita, jotka eivät liity pelkästään palvelimiin. Mallineita voi myös tehdä lisääkin, jos keksii jotain hyviä. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 27. marraskuuta 2018 kello 23.10 (EET)&lt;br /&gt;
:::: Ihan hyvältä tuo näyttää. Ei vastusteta. Hyvä että jollakin on aikaa. --[[Käyttäjä:Lahtis|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;Lahtis&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Lahtis|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 30. marraskuuta 2018 kello 09.17 (EET)&lt;br /&gt;
::::: Tässä jälkihuomiona, en pitäisi sitä syntinä vaikka selkeyden, yksinkertaisuuden ja helposti ymmärrettävyyden ehdoilla mennäänkin, ettei tietoa alettaisi tarkoituksella supistamaan tai jopa välttelemään, kenties tarkempi nysvääminen [https://wiki.archlinux.org/index.php/Firefox ArchWikin Firefox-artikkelin] tyyliin [https://wiki.archlinux.org/index.php/Firefox/Privacy Firefox/Privacy]-aliartikkelihin. Tämä kommentti siis huomiona koko linux.fi:n kannalta eikä pelkästään palvelinta koskien. Vaikka systemd on vallannut käytännössä suurimman osan jakeluista, [https://en.wikipedia.org/wiki/Category:Linux_distributions_without_systemd ilman systemd]:tä porskuttaviakin jakeluita vielä on. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 7. joulukuuta 2018 kello 01.14 (EET)&lt;br /&gt;
&lt;br /&gt;
== Onko tietoa muuan vuokrayhtiöstä joka mainostaa työpaikkojaan täällä jatkuvasti? ==&lt;br /&gt;
Onko kukaan tiettävästi saanut sitä kautta legittiä työtä? Aloin vain miettimään kun ne ilmeisesti bannattiin wikin puolelta.&lt;br /&gt;
:Bannasin sne kun työpaikkailmoituksia varten oikea paikka on foorumi ja pelkäsin, että joku sieltä alkaa pommittaa wikiä urakalla niillä ilmoituksilla. Ei ole kokemusta kyseisestä firmasta, paikkoja näkyy olevan paljon auki, mutta henkilöstövuokrauksestahan siinä taitaa olla kysymys. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 6. marraskuuta 2017 kello 14.30 (EET)&lt;br /&gt;
&lt;br /&gt;
== Palvelimem kello on väärässä ajassa ==&lt;br /&gt;
Sen huomaa Tuoreet muokkaukset-sivulla.&lt;br /&gt;
:Palvelimen kello näyttäisi olevan kyllä oikein, mutta oma aikavyöhykeasetuksesi saattaa olla pielessä, kannattaa tarkastaa wikin asetukset-sivulta. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 3. marraskuuta 2017 kello 11.26 (EET)&lt;br /&gt;
&lt;br /&gt;
== Tor-verkosta tulevat muokkaukset ==&lt;br /&gt;
Hyväksytäänkö tor-käyttäjät nykyään? Aiemmin tor-exit-nodet oli blokattu. Onko ne tarkoitus blokata myös joskus tulevaisuudessa? Voinko kehittää wikiä anonyymisti, torin kautta? Onko suositeltavaa että luon siihen tarkoitukseen käyttäjätilin?&lt;br /&gt;
&lt;br /&gt;
Kaikesta päätellen yritätte bannata tor-nodet. Esitän täten muodollisen vastalauseen sille. Ensinnäkin teette siinä huonoa työtä ja toiseksi se blokkaa myös legitit tor-käyttäjät, kuten minut. Miten olisi kompromissi, eli rekisteröityneet käyttäjät saisi muokata wikiä vapaasti vaikka käyttääkin tor-verkkoa? Tai että saisi muokata artikkeleiden keskusteluja ja ehdottaa sitä kautta muutoksia?&lt;br /&gt;
&lt;br /&gt;
:Ei täällä varta vasten estetä Torin käyttäjiä, vaan tiettävästi käytössä olevat suodatinlistat estävät ainakin osan Torin exit nodeista. Suodatinlistat taas ovat käytössä roskapostittajien takia. En ole ihan varma koskevatko nuo listat rekisteröitymättömien käyttäjien lisäksi myös rekisteröityneitä käyttäjiä, mutta ainakin itse pystyn muokkaamaan wikiä myös Torin läpi (saattaa toki johtua ylläpitäjän oikeuksista tai bannaamattomasta exit nodesta). Voin toki kysyä IRC:ssä josko olisi parempaa tietoa asiasta.&lt;br /&gt;
:Kannattaa myös huomioida se, ettei käyttäjätunnuksella tehtyjen muokkausten IP-osoitteet eivät näy muille &#039;&#039;käyttäjille&#039;&#039;, eli jos haluat ettei oma osoitteesi näy muille käyttäjille, et tarvitse Toria vaan pelkän käyttäjätunnuksen. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 25. lokakuuta 2017 kello 20.36 (EEST)&lt;br /&gt;
:Hmm, tarkoitus olisi kyllä että kirjautuneena käyttäjänä voisi muokata Torinkin läpi. Jos näin ei ole, niin pitääpä tarkistaa konfiguraatiota. Nimettömien käyttäjien suhteen on pakko pitää tiukempaa linjaa, sillä sotkun torjuntaan ei ole ainakaan minulla aikaa ja sitä kyllä riittää jos ei käytä blocklistejä. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 26. lokakuuta 2017 kello 12.02 (EEST)&lt;br /&gt;
::Tuntuu toimivan, tämäkin viesti tulee Torin läpi. Ja koska käytössä on https, niin myös myrkyllisten exit nodejen tapaukseltakin pitäisi olla suojaus. Erityisesti toria käytettäessä on syytä varmistaa että HTTPS-sertifikaatti on kunnossa! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 26. lokakuuta 2017 kello 12.17 (EEST)&lt;br /&gt;
:::Äsken sai taas nähdä että joku exit node on mustalla listalla kun yritin muokata. Sain kuitenkin tilanteen korjattua uusimalla identiteetin.&lt;br /&gt;
Taas sama juttu kun muokkasin. Banni oli ikuinen ja syynä oli se että ippari oli open proxy.&lt;br /&gt;
&lt;br /&gt;
== [[Special:CreateAccount]] ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source line&amp;gt;Mink&amp;amp;auml; v&amp;amp;auml;rinen kruunu logon pingviinill&amp;amp;auml; on p&amp;amp;auml;&amp;amp;auml;ss&amp;amp;auml;? &amp;lt;/source&amp;gt; → &amp;lt;code&amp;gt;Minkä värinen kruunu logon pingviinillä on päässä? &amp;lt;/code&amp;gt; :) [[Käyttäjä:Nemo bis|Nemo bis]] ([[Keskustelu käyttäjästä:Nemo bis|keskustelu]]) 27. tammikuuta 2017 kello 21.40 (EET)&lt;br /&gt;
&lt;br /&gt;
:Joo näemmä ääkköset ei toimi. Laitoin viestiä eteenpäin, ehkäpä ylläpito korjaa kun muilta kiireiltään ehtii. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 28. tammikuuta 2017 kello 12.11 (EET)&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia havaittu ==&lt;br /&gt;
Linux.fin ilmoitusjärjestelmän tulevat muutokset sähköpostiin näkyvät tulevan http://localhost osoitteesta. Onkohan jokin mennyt rikki. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 13. elokuuta 2016 kello 14.00 (EEST)&lt;br /&gt;
:Tämän pitäisi nyt olla kunnossa. Muissa uutisissa päivitin sivustoa pyörittävän palvelimen uusimpaan Ubuntu LTS -versioon, olen kiinnostunut mahdollisista ongelmista joita tästä on seurannut. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 6. syyskuuta 2016 kello 21.46 (EEST)&lt;br /&gt;
::Näyttäisi ainakin toimivan. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 6. syyskuuta 2016 kello 23.08 (EEST)&lt;br /&gt;
&lt;br /&gt;
== RH-sertifikaatit ==&lt;br /&gt;
Olen mahdollisesti hankkimassa RHCSA-sertifikaatin nyt aluksi.&lt;br /&gt;
Kysymys kuuluukin että onko se hintansa arvoinen? Saako sillä oikeasti työtä, ja voiko esimerkiksi olla elinkeinoharjoittajana hoitamassa asiakkaiden järjestelmiä?&lt;br /&gt;
Ja onko koulutuksen järjestäjällä ja kurssimuodolla käytännössä merkitystä, eli onko väliä jos käy RH124+RH134, RH199 tai jonkun verkkokurssin ennen näyttöjä?&lt;br /&gt;
&lt;br /&gt;
:Kahvihuone on tarkoitettu wikiin liittyvälle keskustelulle. Foorumi muulle ---&amp;gt; [https://foorumi.linux.fi/ foorumi.linux.fi] --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 26. toukokuuta 2016 kello 13.31 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Uusi editori ==&lt;br /&gt;
En keksinyt miten tuon allekirjoitusnapin saa takaisin vanhaan editoriin, joten asensin uuden. Mutta ei sitä taida saada tähänkään. No, testailkaa ja kertokaa mitä pidätte, ilmeisesti [asetuksista|https://www.linux.fi/wiki/Toiminnot:Asetukset#mw-prefsection-editing] sen voisi saada pois päältäkin käyttäjäkohtaisesti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 11. huhtikuuta 2016 kello 20.06 (EEST)&lt;br /&gt;
:Ihan hyvältä vaikuttaa kun pikaisesti hiekkalaatikolla testasi. Kaipa tuohon allekirjoituksen lyhenteeseen &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt; täytyy vaan tottua. Kun vanhaan ei ole enää paluuta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. huhtikuuta 2016 kello 23.20 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Teknisiä ongelmia==&lt;br /&gt;
Tiedostojen tallennus ei taaskaan toimi. Missä vika? allekirjoitus ei toimi niin kuin pitäisi. 4. maaliskuuta 2016 kello 15.38 (EET)&lt;br /&gt;
:AbuseFilter-laajennus rikkoi näemmä tiedostojen lähetyksen päivityksen yhteydessä. Otin sen tilapäisesti pois päältä, nyt tuntuu taas toimivan. Allekirjoitusnappi on näemmä kadonnut, mutta tuolla sivun alussa kerrotulla syntaksilla allekirjoitus näkyy pelaavan. Katsotaanpa mistä sen napin saisi takaisin. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 4. maaliskuuta 2016 kello 17.35 (EET)&lt;br /&gt;
&lt;br /&gt;
Olen huomannut ku https yhteys tuli käyttöön. Aina kun artikkeliin lisää kuvan tai kuvia ja tallentaa kuvat palvelimelle niin artikkelin kuva ei päivity, vaan se jää aina tilaan &#039;&#039;Sivut, joilla toimimattomia tiedostolinkkejä&#039;&#039;. En tiedä mistä tämä johtuu. Mutta se on vähän häiritsevää. Ainutkierto tie on tallentaa koko artikkeli uudestaan ilman muutoksia. Sitten kuva päivittyy sivulle. Toinen huomio kahvihuoneessa ei ole allekirjoitus painiketta enää. Voisiko sen saada takaisin. Muualla allekirjoitus nappi löytyy. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 6. huhtikuuta 2016 kello 22.31 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Uusi foorumi==&lt;br /&gt;
Siirsin [http://foorumi.linux.fi foorumin] vanhasta SMF-järjestelmästä uuteen Discourseen. Ainakin &amp;quot;unohdin salasanani&amp;quot; -linkin kautta pitäisi vanhoilla tunnuksilla päästä sisään. Omasta mielestäni tuo foorumiohjelmisto näyttää selkeästi aikaisempaa paremmalta. Mitä mieltä te olette? --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 22. helmikuuta 2015 kello 14.36 (EET)&lt;br /&gt;
&lt;br /&gt;
Hienolta näyttää. Olin kyllä unohtanut koko foorumin olemassa olon jo. :)&lt;br /&gt;
[[Käyttäjä:Peisi1|Peisi1]] ([[Keskustelu käyttäjästä:Peisi1|keskustelu]]) 6. marraskuuta 2015 kello 08.07 (EET)&lt;br /&gt;
&lt;br /&gt;
==Päivityksiä==&lt;br /&gt;
Päivitin MediaWikin ja SMF-foorumiohjelmiston sekä kaiken alla hyrräävän käyttöjärjestelmän tuoreimpaan Ubuntun LTS-versioon. Ainakin täältä katsottuna tuntuu toimivan mallikkaasti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 2. joulukuuta 2014 kello 16.03 (EET)&lt;br /&gt;
&lt;br /&gt;
==Mallineista==&lt;br /&gt;
Nuo ruskeat [[mallineet]] ovat kieltämättä rumia ja näyttävät aivan irrallisilta sivuilla. Muokkailen mallineita pikkuhiljaa vähän asiallisemman näköisiksi &amp;quot;&#039;&#039;yksinkertainen on kaunista&#039;&#039;&amp;quot; -filosofian mukaisesti. Jos joku malline rikkoo sivuja niin kannattaa mainita asiasta. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 1. kesäkuuta 2014 kello 23.11 (EEST)&lt;br /&gt;
:Mitkä ruskeat mallineet? Keltaisiahan suurin osa on. --[[Toiminnot:Muokkaukset/213.216.244.213|213.216.244.213]] 2. kesäkuuta 2014 kello 16.32 (EEST)&lt;br /&gt;
:: Niinpä. Muokkaajan keskustelusivulla epäiltiin värisokeutta. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 22. elokuuta 2014 kello 13.32 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia ==&lt;br /&gt;
Wiki on toiminut todella hitaasti tänään aamusta, ongelmaa selvitellään. Tietokantavirhettä ei toivottavasti enää tule. --[[Käyttäjä:Heikki|Heikki]] ([[Keskustelu käyttäjästä:Heikki|keskustelu]]) 23. huhtikuuta 2014 kello 07.18 (EEST)&lt;br /&gt;
:Tänäänkin esiintyi käyttökatkos. Luulisin, että vika on nyt pois päiväjärjestyksestä. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 30. huhtikuuta 2014 kello 19.15 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Danske Bank ==&lt;br /&gt;
Sivu [[Danske Bank]] pitäis varmaan lukita muokkauksilta, siellä käy niiden työntekijöitä (tai lapsia, tekstistä päätellen) raapustelamassa asiaankuulumatonta töhnää sivulle. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 26. lokakuuta 2013 kello 12.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Luokka suljettujen lisenssien softille? ==&lt;br /&gt;
&lt;br /&gt;
Mikä olisi sopiva nimi niille? --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 25. lokakuuta 2013 kello 17.56 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Televisiot, Digitaalisuus ja Linux - ajat muuttuu, pysyykö Wiki perässä? ==&lt;br /&gt;
&lt;br /&gt;
Aikoinaan oli analooginen TV ja tietokone. Sitten tuli analogisia viritinkortteja, itsellänikin on Hauppagen combo-kortti jossain jolla streemasin videota serveristä verkkoon. Seuraavassa aallossa [[Digiboksit_ja_Linux|digiboxit]] ja [[Linux_ja_digi-tv|digitaalisuus ryömi Linuxiinkin]] (tai [[DVD-elokuva_digiboksiin|elokuvaa tungettiin Linuxilla boxiin]]). Viimeisimmässä laineessa[[Taulutelevisiot| Linux ryömii telkkariin]], muun kulutuselektroniikan ohessa. Kaiken höysteeksi löytyy vielä asiaa sivuavat digitaaliset [[Elokuvapalvelut#Tv-_ja_tallennepalvelut|digi-tv palvelut]]. Wiki on tietysti seurannut aikaansa, mutta itselläni on tullut kutina, että jotain noista sivuista voisi nimetä uudelleen ja/tai sivujen sisältöä tarkastaa onko ne oikeilla sivuilla - noin ylipäätään tarkastella asiaa kokonaisuutena, vaikka mitään ei muuttaisikaan. Ylipäätään asiasta kiinnostuneet voisivat kertoa parannusehdotuksensa täällä ennen härdellimäistä remonttia. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 22.21 (EEST)&lt;br /&gt;
: Wikihän yrittää kaikin keinoin seurata aikaansa. Ainahan löytyy tarkastettavaa. Itse ainakin seuraan mm. [[elokuvapalvelut|elokuvapalveluiden]] kehitystä. Ja kulutan niitä. Tällä hetkellä osa sivustoista on aikamoisia listauksia, mikä toimii ja mikä ei. Listaukset ovat siinä hyvät että niistä näkee heti tukeeko jokin jotakin ja toimiiko se vai joutuuko sitä virittelemään.  Kehitysehdotuksia asiasta ei vielä ole. Asiaa täytyy miettiä. Kyllähän wiki pysyy perässä jos aktiivisia kirjoittajia löytyy. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. heinäkuuta 2013 kello 16.53 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Siirsin ainakin turhan &#039;&#039;linux&#039;&#039; sanan sisältävät sivut uusille nimille. Kokonaisuutta pitäisi varmaan ajatella vielä tulisiko sitä järjestellä enemmän. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 21. lokakuuta 2013 kello 12.49 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Yritys-malline ==&lt;br /&gt;
&lt;br /&gt;
Sellaista ei ole, mutta sellaisen voisi tehdä. Ei mitään tursuavaa kun ei kilpailla wikin kanssa, mutta muutamat perustiedot. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 17.47 (EEST)&lt;br /&gt;
* nimi&lt;br /&gt;
* logo&lt;br /&gt;
* liikevaihto?&lt;br /&gt;
* kotipaikka kaupunki / maa&lt;br /&gt;
* opensource sivusto?&lt;br /&gt;
* kotisivu&lt;br /&gt;
&lt;br /&gt;
: Vähän vastaava sivukin on katso esimerkiksi [[Valve Corporation]], [[Id Software]]n sivusto, joka on Perustietoa, Käsitteet ja Pelit luokassa. Piäisikö nämäkin sivut siirtää myös tähän luokkaan. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 10. heinäkuuta 2013 kello 19.27 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Tarkoitin mallinnetta, en luokkaa (class vs template). --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 21.36 (EEST)&lt;br /&gt;
::: Oho en huomannut, mutta tuollainenkin luokka oli jo valmiina. Voihan tuosta jonkin mallineenkin tehdä ainakin minun puolesta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. heinäkuuta 2013 kello 16.40 (EEST)&lt;br /&gt;
&lt;br /&gt;
: [[:Malline:Yritys]] on kyhäelmä aiheesta. Koeponnistuksessa parilla sivulla. Jos todetaan toimivaksi, malline pitäisi läiskiä kaikille [[:Luokka:Yritykset]]-sivuille. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 30. syyskuuta 2013 kello 13.21 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Google ja Googlen pakettivarasto ==&lt;br /&gt;
&lt;br /&gt;
Muihin vastaaviin sivuihin verrattuna sivu [[Google]] pitäisi siirtää historiansa kanssa sivuksi [[Googlen_pakettivarasto]] ja luoda uusi sivu [[Google]] jossa olisi firma lyhyesti ja sen &#039;&#039;Katso myös&#039;&#039; linkkaukset. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 17.19 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Voihan tuon Googlen siirtää yritys sivuksi ja luoda uusi Googlen pakettivarasto sivu. Kuulostaa ihan hyvältä idealta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 10. heinäkuuta 2013 kello 19.23 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Tarkoitus oli säilyttää se historia sille kuuluvalle sivulle. Tarkkaavuutta näihin sisennyksiin, menee puurot ja vellit sekaisin. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 21.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Jakelu-mallinne parannuksia ==&lt;br /&gt;
&lt;br /&gt;
Dodanoin, voisko siihen lisätä esim &#039;&#039;elinkaaren pituus&#039;&#039; tms kentän josta selviäisi kuinka pitkään tuetusta jakelusta on kyse jos sellaisen päättää asentaa? --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 16.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
Ehkä &#039;&#039;toiminnallinen tila&#039;&#039; voisi olla enemminkin &#039;&#039;elinkaaren vaihe&#039;&#039; ja sen arvo voisi olla &#039;&#039;julkaisematon&#039;&#039;, &#039;&#039;tuettu&#039;&#039;, &#039;&#039;loppu&#039;&#039; (eol) tms. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 16.52 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Väärinkäyttösuodatin rikki ==&lt;br /&gt;
&lt;br /&gt;
Väärinkäyttösuodantinlaajennos vaikuttaisi olevan poissa toiminnasta, mikä selittänee viimeaikaisen spämmiaallon. --[[Käyttäjä:Pb|Pb]] ([[Keskustelu käyttäjästä:Pb|keskustelu]]) 9. heinäkuuta 2013 kello 16.41 (EEST)&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;&amp;quot;Linux.fi:n mainossuodatin on estänyt sivun tallentamisen.&amp;quot;&#039;&#039;&#039; - mitäs jos heitätte noi ritsat pois täältä ja suljette sen avoimen editoinniin. En jaksa pelleillä ko käkättimen kanssa kun a) ne haittaavat sisällön tuottamista b) ne eivät estä tätä paskan vyörymistä mitä on logista nähtävissä. Tämä wiki vain edesauttaa spämmin leviämistä palkitsemalla spämmääjiä kun roska roikkuu verkossa päivästä toiseen. Märkä uni, että sotkujen siivoajia riittäisi vastaamaan joka töherrykseen. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 15.34 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Vika on näemmä 7 vuotta vanha, voi ei. --&amp;lt;span style=&amp;quot;font-family: monospace; text-shadow: 3px 3px 2px red;&amp;quot;&amp;gt;[[Käyttäjä:LinuxMan|LinuxMan]] + [[Käyttäjä:LinuxMan/Chat|chat]]&amp;lt;/span&amp;gt; 16. marraskuuta 2020 kello 09.05 (EET)&lt;br /&gt;
&lt;br /&gt;
== Jolla ==&lt;br /&gt;
&lt;br /&gt;
Ehkä hieman omituista, että Jolla mobile on suhteellisen suomalaista alkuperää ja linux.fi:ssä ei ole siitä minkäänlaista mainintaa, saati sitten seikkaperäisempää sepustusta. Pitäisikö asialle tehdä jotain? Meegon tarina voisi olla myös paremmin esitettynä, itse [[meego]] sivu ja linux-puhelimet sivu sisältää asioita joiden sijaintia voisi siirrellä ja &#039;&#039;pääartikkeli&#039;&#039;maisesti linkitellä. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 9. heinäkuuta 2013 kello 12.04 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Ehkäpä joutuu siitä että kukaan ei ole sitä vielä tehnyt. Sinä voisit olla ensimmäinen?? ;) --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 9. heinäkuuta 2013 kello 17.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Mutta kun haluaisin itse enemminkin kuluttaa sitä tekstiä. :) Luulen, että sen veistämiseen löytyy parempia kavereita. Noin niinkuin yhteisönä, tämä aihe ei ole kiva-olla-olemassa vaan vähän niinkuin pitäis olla jos suomalaiset ripustaa tämäntyyppisen linux-tietopankin nettiiin Suomessa. Vähän sama kun Lapista ei löytyis mitään kirjoitettua materiaalia Joulupukista. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 13.48 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Sailfish-käyttöjärjestelmästä nyt ainakin voisi olla jotain, kunhan se nyt ensin julkaistaan. [[Käyttäjä:Oselotti|Oselotti]] ([[Keskustelu käyttäjästä:Oselotti|keskustelu]]) 10. heinäkuuta 2013 kello 14.02 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Lähdekoodiasennus ja Jakelukohtaista ==&lt;br /&gt;
&lt;br /&gt;
Nykyinen trendi on asentaa jokin pitkälle viimeistelty ja suosittu jakelu joka käyttää jotain pakettijärjestelmää ohjelmavalikoiman hallintaan. Jakeluiden ohjelmavalikoimat ovat kasvaneet vuosien mittaan ja lähdekoodista asentaminen on yhä harvinaisempaa. Wikin sivuista valtaosa käsittelee yksittäistä ohjelmaa ja usein myös lähdekoodista asentamista. Prosentuaalisesti lähdekoodin asennusohje vaiheineen vie sivusta paljon tilaa ja toisaalta ajan myötä käsin asentamisen merkitys vähenee. Tilan viemisen ohella lähdekoodiohjeet vievät myös huomiota muulta sisällöltä. Toisaalta, harvassa sivussa mainitaan tietoja joita nykyään lukija etsii ja tarvitsee: tarkka paketin tai pakettien nimet omalle jakelulleen. Ylläoleva huomioiden, lähdekoodi-asennusohjeissa on paljon hyödyllisiä, aikaasäästäviä ja yksityiskohtaisia ohjeita jos niitä todella tarvitsee.&lt;br /&gt;
&lt;br /&gt;
Koska Wikin on tarkoitus palvella lukijaansa ja vastata aikaansa, ehdotan seuraavaa:&lt;br /&gt;
* Asennusohjeet lähdekoodeista siirretään omaan, ohjelmaa käsittelevän sivun alasivuksi.&lt;br /&gt;
* Alasivun nimi on linux.fi/wiki/Xbmc/Asennus_X jossa X on? Ehdotuksia? Skandiongelma?&lt;br /&gt;
* Alasivuun viitataan kappaleessa &#039;&#039;Katso myös&#039;&#039;.&lt;br /&gt;
* Joka ohjelman sivulle lisätään loppuun toisen tason kappale otsikolla &#039;&#039;Jakelukohtaista&#039;&#039;&lt;br /&gt;
* Jakelukohtaista kappaleen alle jakelukohtaiset ohjeet kolmannen tason otsikolla joka on jakelun nimi.&lt;br /&gt;
* Jakelukohtaisessa kappaleessa mainitaan vähintään:&lt;br /&gt;
** paketin tai pakettien tarkka nimi boldattuna.&lt;br /&gt;
** viittaus paketinhallintajärjestelmän sivuun.&lt;br /&gt;
** viittaus pakettivarastoon jos se poikkeaa oletuksista.&lt;br /&gt;
* Käytäntö ohjeistetaan Wikin muokkausohjeissa.&lt;br /&gt;
&lt;br /&gt;
Muutoksen yhteydessä kannattaisi ehkä muokata ohjelman infoboxia ja mahdollisesti hyödyntää muita mallinteita? [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 13. toukokuuta 2013 kello 13.14 (EEST)&lt;br /&gt;
 &lt;br /&gt;
:* Sivuistahan on yritetty tehdä jakeluriippumattomia. Ainakin mitä minä olen törmännyt joihinkin lähdekoodeista asennettaviin ohjelmiin niin silloin kun olen esimerkikisi ohjeen raapustanut tänne. Ei ole ollut muita vaihtoehtoja ko. ohjelman asentamiseen (ei löydy mistään pakettivarastosta), mutta jos haluat näin menetellä niin siitä vaan.&lt;br /&gt;
:* Yleensä ohjelman tarkka nimi sanotaan ohjeen alussa tai &#039;&#039;&#039;Asenna&#039;&#039;&#039; kohdassa siellä voi olla tietoa myös jakelukohtaisesta nimestä. Jos pakettia ei löydy omalle jakelulle niin lähdekoodeistahan se on asennettava.&lt;br /&gt;
:* Alasivuissa on myös yksi ongelma. Olen huomannut että jotkin käyttäjät eivät viittaa ohjelmiin &#039;&#039;&#039;Katso myös&#039;&#039;&#039; kohdassa. Ja näin koko alasivujen hyöty hukkuu massaan. Kun niitä ei tavallaan löydä. (samoin joiltakin unohtuu luokkien käyttö).&lt;br /&gt;
:* Jakelukohtaista. -&amp;gt; Sivuistahan on yritetty ja tehdään mahdollisimman jakeluriippumattomia. Eli en näe ainakaan tässä järkeä.&lt;br /&gt;
:--[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 13. toukokuuta 2013 kello 13.32 (EEST)&lt;br /&gt;
::Minusta Tujulla on siinä hyvä pointti, että asennusohjeiden määrä sivuilla on vähän häiritsevä ja vie huomiota hyödyllisiltä asioilta. Minusta kuitenkin tuo /-viivalla erotettu alasivu tuntuu kömpelöltä ratkaisulta ja esitän että asennusohjeet laitettaisiin oman otsikkonsa alle ja oletusarvoisesti piiloon [https://www.mediawiki.org/wiki/Extension:CollapsableText CollapsableText]-laajennuksen avulla. Näin asennusohjeet olisivat pois häiritsemästä, mutta nopeasti ja näppärästi saatavissa. Näitä varten voitaisiin tehdä asennusohjeet-malline, joka vakiinnuttaisi tuon asian ulkoasun. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 17. toukokuuta 2013 kello 23.42 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Ajatus lähti sisällön yhtenäistämisestä ja käytettävyydestä: Nykyisellään focus on harvemmin tarvittavassa tiedossa joka vie toisilla sivuilla paraatipaikan ja toisaalta yhtenäisen käytännön puute ei kannusta eikä painota puuttuvien, oleellisten tietojen lisämistä (pakettien nimet eri jakeluille), esitetty ratkaisuvaihtoehto oli vain ensimmäinen mieleen tullut. Painottaisin vielä, että ehdotuksessani oli kaksi osaa: Tilaa vievän lähdekoodiasennusohjeen muutos ja Jakelukohtaista kappaleen lisääminen. Nämä ovat kaksi eri asiaa, vaikkakin sivuavat toisiaan.&lt;br /&gt;
&lt;br /&gt;
:::Ehdotettu CollapsableText voisi ajaa asian. Pistää mietityttämään sivulla mainittu varoitus &#039;&#039;live sivuilla&#039;&#039; käytöstä. Linux on perinteisesti ollut ratkaisu joka toimii vanhemmilla laiteistolla ja toisaalta mm selaimien kirjo ja selainspecifisten ominaisuuksien tuki ollut vähäistä. Eli miten tuo sitten toimisi esim Lynxin tai keveiden työpöytien+selaimien käyttäjille? Perustuuko se Java/Ecma-Scriptiin? Kyse on laajennoksesta, mikä elinkaariennuste sen saatavuudelle on tuleviin päivityksiin? Ehdottamani alasivu olisi staattista tekniikkaa eikä sen suhteen ilmeisesti ole riskiä toimivuudesta. Asia tulisi varmistaa jos käytäntö otetaan käyttöön valtaosalla ohjelma-sivuja.&lt;br /&gt;
&lt;br /&gt;
:::Lähdekoodiohjeiden osalta näkisin asian myös parannuksena. Kun niillä on oma paikkansa, kynnys isompienkin ja tilaa vievien listauksien ja tulosteiden käyttöön laskisi ja siten niiden informaation määrä ja käyttöarvo kasvaisi. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 18. toukokuuta 2013 kello 12.17 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Voisiko tota CollapsableText laajennusta kokeilla jossakin hiekkalaatikkosivulla tai ulkosella saitilla? Miten se vaikuttaisi esim tulostukseen? Todennäköisesti se on vähäistä eikä sille kannata panna paljon painoarvoa, mutta ehkä lähdekoodiasennus voisi olla sellainen jossa sitä joskus käytetään. Matkapuhelimet ja tabletit kannattaisi myöskin testata samalla. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 18. toukokuuta 2013 kello 13.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Tarkemmin katsottuna tuo laajennus näkyy olevan rikki, eikä se toimi nykyisellä MediaWikillä. Mutta vastaavan saa tehtyä jo valmiina mukana tulevalla jQuery-palikalla, laitoin sen [[Linux.fi:Kahvihuone|kahvihuoneeseen]] kokeiluun. Lopputulos näyttää tavallisella selaimella ihan asialliselta, eikä [https://dl.dropboxusercontent.com/u/221630/lynx-collapsible.png lynxilläkään] hullummalta. Jakelukohtaista-osan tekeminen on varmaan ihan paikallaan myös. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 18. toukokuuta 2013 kello 23.07 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Voihan tuota laajennosta kokeilla. Mutta itse olen aina ihmetellyt miksi useilla saiteilla asennusohjeet ovat piilotettu CollapsableTextillä tosi typerästi. Itse en pidä siitä yhtään. Miksi tekstiä pitäsi sivuilla piilottaa. Tuosta focuksesta. Jos sivun luoja EI VAAN halua (pysty, jaksa tai huvita) kirjoitaa ohjelmasta oikein minkäänlaista tekstiä. Esimerkiksi ohjelman sivun focus näyttää olevan joillakin käyttäjillä se että sieltä on vain käytännössä linkki ohjelman kotisivulle (lukekaa sieltä). Ei sivut ovat tosi tylsiä. (pelkkä listauskin olisi parempi.) Ei siinä paljon focukset ja käytettävyydet paljon siten paina. Jos sivuilla ei ole paljon mitään. Niin pelkkä asennusohjekin on herkkua. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 20. toukokuuta 2013 kello 11.43 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Kyllä tässäkin on pointtinsa. Jos sivu on aluillaan eikä ne sorsa-ohjeet ole pitkät niin voihan se toimia alkuvaiheessa tuomaan lihaa luiden päälle. Toisaalta se saattaa vaikuttaa käänteisesti, että sivu näyttää jo suhteellisen täyteläiseltä eikä kutkuta potentiaalisia kirjoittajia vaikka asiasta jotain tietäisivätkin. Alkuperäinen dilemma, että ajat muuttuu ja lähdekoodiohjeita ei juurikaan tarvita vain korostuu jos sivu on aluillaan ja 99,78% prosenttia sisällöstä on mitä ei etsitä eikä lueta.&lt;br /&gt;
&lt;br /&gt;
::::Jos juuri aloitettu sivu tuntuu tyhjältä, ehdotettu käytäntö tuo jatkossa joka sivulle uuden kappaleen ja sen alakappaleet monelle jakelulle. Sen sijaan, että tyhjyyttä täytetään tekstimassalla jota 99% ei lue, kirjoittaja voisi jatkossa laittaa ohjelmasta vaikka kuvakaappauksen joka piristää sivua jo kummasti. &lt;br /&gt;
&lt;br /&gt;
::::Valtaosa nykyisestä yhteisöstä lukee alkuperäisiä sivuja vaivatta, mutta silti itsekkin etsin suomenkielisestä wikistä usein ideoita ohjelmiksi johonkin tarkoitukseen (kuten taloushallinto-ohjelmiin viimeeksi). Siten pelkkä sivun olemassaolo linkkeineen ja pakettien nimineen on jo paljon ja säästää aikaa. Jos tätä hyödyllisyyden tunnetta ei saavuteta, linux.fi ei ole se ensimmäinen paikka etsiä tietoa.&lt;br /&gt;
&lt;br /&gt;
::::Noin ylipäätään suhtaudun sivuihin pragmaattisesti:&lt;br /&gt;
::::* Sivut eivät ole minun henkilökohtaisia. Niitä voi ja pitää muidenkin muokata. Sama pätee muihin sivuihin.&lt;br /&gt;
::::* Jos sisällöstä ollaan eri mieltä, kädenvääntö käydään sen argumenteilla, ei sillä kuka sen on aloittanut tai viimeeksi muokannut.&lt;br /&gt;
::::* Wiki liikkuu eteenpäin pienillä incrementaalisilla muutoksilla eikä sisällön tavoitteet (rakenne, halutut sivut, jne) riipu siitä mitä yksittäinen osallistuja jättää systemaattisesti tekemättä, missä vaiheessa toteutusta ollaan tai miten kaukana tavoite on. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 20. toukokuuta 2013 kello 13.55 (EEST)&lt;br /&gt;
&lt;br /&gt;
Noin sivuhuomiona: Kokisin, että jakelut ovat nykyään jo niin pitkälle kehittyneitä, että lähdekoodiasennusohjeiden sijaan yhteisön jäseniä kannustettaisiin paketoimaan kyseinen ohjelma käyttämäänsä jakeluun suoraan. Käsinasennusohjeiden tekeminen on vähän kuin pätsääminen jakelutasolla - sen sijaan, että asiantuntevat työtunnit tehtäisiin upstreamissa josta ne ovat helposti hyödynnettävissä isoihin massoihin.&lt;br /&gt;
* Käyttäjäkunta laajenee paljon enemmän helpottamalla asennuksia (jakelu siirtyy taviksia kohti, toteutettavissa), kuin opettamalla loppukäyttäjät kääntelemään sorsia (tavikset siirtyy jakelua kohti, hankalaa).&lt;br /&gt;
* Työmäärässä ei ole juurikaan eroa.&lt;br /&gt;
* Käännösohjeet pysyvät väkisin ajantasalla kun jakelu joko kääntää tai hylkää ne. Wikissä vastaavaa pilkuntarkkaa ja toistuvaa mekanismia ei ole. Seurauksena sisältö vanhenee nopeasti kun sen ajantasaisuutta on hankala tarkistaa. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 20. toukokuuta 2013 kello 14.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Palvelimen päivitys ==&lt;br /&gt;
Linux.fi muuttaa uudelle palvelimelle tänä viikonloppuna. Muutoksen myötä wikin käyttäjiä pystytään palvelemaan monipuolisemmin ja joustavemmin. Jee! --[[Käyttäjä:Maakuth|Maakuth]] 25. huhtikuuta 2013 kello 23.13 (EEST)&lt;br /&gt;
:Tämä on nyt tehty ja tuntuu toimivan. Ilmoitelkaa jos huomaatte että jokin on rikki. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 28. huhtikuuta 2013 kello 00.29 (EEST)&lt;br /&gt;
::Yksi tunnettu vika on, nimittäin pienoiskuvat eivät kaikkialla näy (esimerkkinä [[KDE tutuksi]]). Tätä koitetaan selvittää mahdollisimman pian. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 1. toukokuuta 2013 kello 14.49 (EEST)&lt;br /&gt;
:::No niin, selvisihän se lopulta. Mainittakoon että &amp;lt;tt&amp;gt;$wgTmpDirectory&amp;lt;/tt&amp;gt;-muuttuja MediaWikin asetuksissa osotti vanhastaa johonkin epäsopivaan paikkaan. Alkoi toimia kun poistin sen määrityksen kokonaan, oletusasetukset periytyvät jostain muualta. Nyt tietääkseni kaikki on kunnossa. Ilmoitelkaa jos keksitte jotain muita ongelmia. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 11. toukokuuta 2013 kello 16.21 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Ongelmia kirjautumisessa ==&lt;br /&gt;
Näyttää siltä että kirjautuminen ei toimi ainakaan kaikilla käyttäjillä. Vikaa selvitellään.... --[[Käyttäjä:Heikki|Heikki]] 8. maaliskuuta 2013 kello 00.32 (EET)&lt;br /&gt;
:Korjattu. Vika johtui epäonnistuneesta päivityksestä uudempaan Mediawikiin, jonka jälkeen jouduin palauttamaan vanhan version ja tietokanta meni vähän solmuun. Nyt pitäisi kuitenkin toimia. Kiitokset Otolle vian ilmoittamisesta, oli jäänyt itseltä huomaamatta kun sitä on kuitenkin aina automaattisesti kirjautuneena sisään. --[[Käyttäjä:Heikki|Heikki]] 8. maaliskuuta 2013 kello 23.22 (EET)&lt;br /&gt;
&lt;br /&gt;
==Viimeaikaiset spämmimuokkaukset==&lt;br /&gt;
Tein [[Toiminnot:Väärinkäyttösuodatin/8|uuden väärinkäyttösuodattimen]], jonka pitäisi estää viimeaikaisen tyyppiset spämmimuokkaukset (ja vain ne). Suodatin on kierrettävissä lisäämällä muokkausyhteenvetoon sana &amp;quot;suodatin&amp;quot;. --[[Käyttäjä:Pb|Pb]] 22. huhtikuuta 2012 kello 22.43 (EEST)&lt;br /&gt;
:Tuo ei ollutkaan tarpeeksi tehokas, joten tein [[Toiminnot:Väärinkäyttösuodatin/9|uuden]] (hieman eri lähestymistavalla) ja poistin ylläolevan käytöstä. --[[Käyttäjä:Pb|Pb]] 23. huhtikuuta 2012 kello 01.34 (EEST)&lt;br /&gt;
::Edelleen tein suodattimen, joka estää viimeaikaiseen bottikaavaan (iso kirjain + 2-15 pientä kirjainta + iso kirjain + 2-15 pientä kirjainta + 2-4 numeroa) pohjautuvien käyttäjätunnusten luonnin. Onko tuon päälläolo OK? --[[Käyttäjä:Pb|Pb]] 23. huhtikuuta 2012 kello 21.22 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Spämmibottitunnusten luonnin esto==&lt;br /&gt;
Spämmibotin luomia uusia käyttäjätunnuksia näyttää tulevan aika iso määrä per päivä. Yksi tapa päästä niistä eroon olisi [http://www.mediawiki.org/wiki/Extension:TitleBlacklist TitleBlacklist]-laajennoksen (ei riippuvaisuuksia, merkitty vakaaksi) asentaminen, jolla voi estää tiettyyn säännölliseen lausekkeeseen sopivien käyttäjätunnusten tai sivunnimien luonnin. &lt;br /&gt;
&lt;br /&gt;
Etunimi+Sukunimi+2-4 numeroa -tyyppisten käyttäjätunnusten esto onnistuisi TitleBlacklist-laajennoksen kanssa esimerkiksi lisäämällä rivin&lt;br /&gt;
 User:&amp;lt;nowiki&amp;gt;[A-Z][a-z]{2,15}[A-Z].{2,15}[0-9]{2,4}&amp;lt;/nowiki&amp;gt; &amp;lt;casesensitive&amp;gt;&lt;br /&gt;
järjestelmäviestiin [[Järjestelmäviesti:Titleblacklist|Titleblacklist]]. --[[Käyttäjä:Pb|Pb]] 4. joulukuuta 2011 kello 21.05 (EET)&lt;br /&gt;
:Päädyin asentamaan reCaptchan Wikipediasta tutuilla asetuksilla, eli rekisteröinti tai rekisteröimättömänä muokkaus vaatii captcha-tunnistuksen läpäisyä. Katsotaan miten toimii. Regexp-suodatushan ratkaisisi tämän nykyisin vaivaavan botin, mutta sitten sitä joutuisi taas hienosäätämään seuraavaa varten, toivotaan että tämä ratkaisu pelaisi pitempään. --[[Käyttäjä:Maakuth|Maakuth]] 7. joulukuuta 2011 kello 12.03 (EET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Linkitys kielletty uusilta käyttäjiltä==&lt;br /&gt;
Viimeaikaisten spämmien takia loin [http://linux.fi/wiki/Toiminnot:V%C3%A4%C3%A4rink%C3%A4ytt%C3%B6suodatin/6 uuden väärinkäyttösuodattimen ehdon] joka estää uusia käyttäjiä lisäilemästä linkkejä. Katsotaan miten toimii ja otetaan vaikka pois päältä jos tuo aalto päättyisi. --[[Käyttäjä:Maakuth|Maakuth]] 21. marraskuuta 2011 kello 13.06 (EET)&lt;br /&gt;
&lt;br /&gt;
:Lisäsin tuohon sellaisen ominaisuuden, että linkin lisäys onnistuu uusiltakin käyttäjiltä, jos muokkausyhteenvetoon kirjoittaa sanan &amp;quot;suodatin&amp;quot;. Tämän pitäisi estää spämmibottien muokkaukset, mutta sallia muiden tekemät. --[[Käyttäjä:Pb|Pb]] 21. marraskuuta 2011 kello 17.13 (EET)&lt;br /&gt;
&lt;br /&gt;
::Hyvä juttu. Tein vielä toisen suodattimen, joka estää uusilta käyttäjiltä sivujen luonnin kokonaan. Tarkkaillaanpa liikennettä ja otetaan pois jos mahdollista. --[[Käyttäjä:Maakuth|Maakuth]] 22. marraskuuta 2011 kello 19.54 (EET)&lt;br /&gt;
&lt;br /&gt;
== Foorumi päivitetty==&lt;br /&gt;
[http://linux.fi/foorumi Keskustelualue] päivitettiin SMF:n uuteen versioon. Ilmoitelkaa, jos foorumi ei toimi normaalisti. Jos saat virheen &amp;quot;Template parse error&amp;quot;, kokeile poistaa evästeet. --[[Käyttäjä:Heikki|Heikki]] 15. syyskuuta 2011 kello 08.28 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Kuvien kanssa ongelmia ==&lt;br /&gt;
Jotkut kuvat/pienoiskuvat eivät näkyneet, sillä kuvien [[chmod|tiedosto-oikeudet]] olivat väärin palvelimella. Nyt kaikkien pitäisi toimia. --[[Käyttäjä:Heikki|Heikki]] 30. elokuuta 2011 kello 08.53 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Päivitys ==&lt;br /&gt;
Päivitin wikin versioon 1.17. Samalla tuli käyttöön uusi ulkoasu. Ilmoitelkaa jos jotain hajosi. --[[Käyttäjä:Heikki|Heikki]] 3. elokuuta 2011 kello 21.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Päivitys ==&lt;br /&gt;
Mediawiki päivitetty versioon 1.16.4. Ilmoitelkaa jos on ongelmia. --[[Käyttäjä:Heikki|Heikki]] 18. huhtikuuta 2011 kello 18.13 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Mallineiden luokitus ==&lt;br /&gt;
Kaikki mallineet tulisi luokitella luokkaan [[:Luokka:Mallineet|mallineet]]. Näin niiden löytäminen helpottuisi huomattavasti. --[[Käyttäjä:Kalakeitto Kilju|Kalakeitto Kilju]] 10. huhtikuuta 2010 kello 18.41 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Palvelin ==&lt;br /&gt;
Mahdollisesti off-topicia, mutta millä tavalla tarkemmin ottaen on Linux.fi:n tekninen puoli toteutettu? Minun käsityksen mukaan web-hotelli olisi aikalailla käytäntö jos tällaista halutaan, mutta ilmeisesti teillä on joku oma palvelinkone siellä? -Cerre10. huhtikuuta 2010 kello 19.40 (UTC)&lt;br /&gt;
&lt;br /&gt;
Ja ja. Hyvän tavan mukainen &amp;lt;nowiki&amp;gt;--~~~~~&amp;lt;/nowiki&amp;gt;-merkintä ei tunnu toimivan, ainakaan minulla.&lt;br /&gt;
:Palvelinpuoli on hyvällä mallilla. Tehokkaan palvelimen ja riittävästi kaistaa tarjoavat sivulla [[Linux.fi:Tietoja]] mainitut tahot. Samalla palvelimella on Linux.fin lisäksi myös muutamia muita sivustoja. --[[Käyttäjä:Heikki|Heikki]] 11. huhtikuuta 2010 kello 04.28 (UTC)&lt;br /&gt;
::Juuripa näin, uusi palvelinkonekin tuli varsin hiljattain käyttöön. --[[Käyttäjä:Maakuth|Maakuth]] 11. huhtikuuta 2010 kello 12.18 (UTC)&lt;br /&gt;
:::Siis tarkoitan että voiko palvelinkoneesta antaa ulos tarkempia speksejä? Mihin on kytketty verkkoon, ja ilmeisesti nimenomaan runkoverkkoon? Tuskin kotiin saa niin järeän liittymän kun toimivan wikin pitäminen vaatii. Jopa 10/10-kuitu lienee tarkoitukseen aika laiha.&lt;br /&gt;
:::Juttu on siis siinä että minäkin saan kotiini vanhan palvelinkoneen kuluvan kuukauden aikana, ja haluan vähän vertailla asioita. Aion käyttää sitä Debian- ja Opensuse-seedboxina sekä reitittimenä. Jos oikein innostun niin lähden keräämään vanhoja (kannettavia) tietokoneita, ja laitan ne työskentelemään BOINC-projektin hyväksi. Sonera hyväksyy viisi konetta yhden liittymän taakse, mutta tämä lienee ohitettavissa omalla aliverkolla. --Cerre 12. huhtikuuta 2010 kello 16.34 (UTC)&lt;br /&gt;
::::Kaistaa on käytössä tarpeeksi, en edes tiedä yksityiskohtia. Sinänsä Linux.fi ei paljoa aiheuta liikennettä kun suurin osa sisällöstä on tekstiä. Viime kuukausina kaistaa on kulunut n. 10-11gt, kun eri kävijöitä on ollut n. 30 000 ja sivulatauksia n. 500 000. Vääntöä tarjoaa kasa Xeon-ytimiä ja muistia on gigatavukaupalla. Käyttiksenä on [[CentOS]]. --[[Käyttäjä:Heikki|Heikki]] 12. huhtikuuta 2010 kello 16.42 (UTC)&lt;br /&gt;
&lt;br /&gt;
Harmittaa että jotkut artikkeleista ovat vanhentuneita. Esim Sub.fi ja Jimtv.fi sivustoilta ei voi katsella enää ohjelmia suoraan vaan Jimtv.fi ohjelmat löytyvät nykyään Ruutu.fi sivustolta ja sub.fi sivuston ohjelmat MTV Katsomosta --[[Käyttäjä:Pyscowicz|Pyscowicz]] ([[Keskustelu käyttäjästä:Pyscowicz|keskustelu]]) 22. marraskuuta 2014 kello 10.36 (EET)&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=54086</id>
		<title>Linux.fi:Kahvihuone</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=54086"/>
		<updated>2021-10-24T09:19:28Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Kahvihuoneen tarkoitus on keskustella [[Linux.fi]]-wikistä. [https://foorumi.linux.fi Foorumissa] saa jutella kaikesta mikä liittyy [[Linux]]iin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HUOM!&#039;&#039;&#039; Lisääthän uudet keskusteluaiheet kahvihuoneen alkuun, niin sivu pysyy selkeämpänä. Hyvän tavan mukaista on myös käyttää &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt; -merkintää viestien lopussa, jotta kirjoittaja ja kirjoitusaika jäisivät selvemmin esille. &lt;br /&gt;
&lt;br /&gt;
Allaolevat linkit johtavat keskusteluarkistoihin.&lt;br /&gt;
*[[Linux.fi:Kahvihuone/Arkisto|Arkisto 1]]&lt;br /&gt;
*[[Linux.fi:Kahvihuone/Arkisto2|Arkisto 2]]&lt;br /&gt;
&lt;br /&gt;
== Hei päivitin muutamia peliohjaimiin viittaavia sivuja ==&lt;br /&gt;
... ja toivoisin jonkun katsovan niiden oikeellisuudesta. Taitaa olla 10 vuotta tai jopa enemmän, kun viime kerralla päivitin, niin se ei välttämättä mennyt niin kuin Strömsöössä. Lähde on Ubuntufoorumissa: https://forum.ubuntu-fi.org/index.php?topic=56765.msg433945&lt;br /&gt;
Tosin vähän yleistin niitä. Lisäksi lisäsin Laitteisiin peliohjaimet ([[Portaali:Laitteisto]])-sivulle. Tein myös uuden sivun [[Peliohjaimen kalibrointi]], joka nimensä mukaisesti kertoo, kuinka kalibroidaan peliohjain. Sinne löytää [[Peliohjaimet]]-sivulta. Pitäisikö nämä sivut yhdistää, vai onko hyvä näin, kuten ne on tehty ?&lt;br /&gt;
&lt;br /&gt;
== Jakelu-mallineen sukulaisjakelut-kohta ==&lt;br /&gt;
Useimpien jakeluiden artikkeleiden yhteydestä on jo pitemmän aikaa löytynyt ns. jakelu-sarjamalline, esim. [[Malline:Debian|Debian]], jossa yleensä listataan tunnetuimpia artikkelin jakeluun liittyviä muita jakeluita. Joten ehdotukseni/kysymykseni on seuraava, mitä mieltä ollaan siitä, olisiko soveliasta poistaa [[Malline:Jakelu|Jakelu]]-mallineesta sukulaisjakelut-kohta, koska ns. &amp;quot;sukulaisia&amp;quot; tuppaa olemaan suunnaton määrä kun vähän syvemmältä tutkii. Näin tarvitsisi ainoastaan keskittyä jakeluperheen sarjamallineen ajan tasalla pitoon, eikä jakelu-artikkeleihin jäisi epämääräistä, loppupeleissä kahta päällekkäistä dataa sisältävää osiota. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 5. syyskuuta 2021 kello 17.55 (EEST)&lt;br /&gt;
:[[Malline:Jakelu|Jakelu]]-mallineesta poistettu kohta sukulaisjakelut, mutta [[:Luokka:Jakelut|Luokka:Jakelut]] artikkeleihin jää aiemmin merkityt sukulaisjakelut-kohdat kuitenkin. Nämä voi poistaa / putsata mahdollisuuksien mukaan, ja päivittää jakeluiden sarjamallineita, jos niissä puutteita ilmenee. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 10. syyskuuta 2021 kello 13.34 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Rekisteröimättömien muokkaukset == &lt;br /&gt;
Toistuvien ilkivaltatapausten vuoksi rekisteröimättömien käyttäjien muokkaukset on toistaiseksi estetty. Asiallisia muokkauksia on muutenkin tehty aika vähän ilman käyttäjätiliä, jospa tästä ei siis aiheutuisi kohtuutonta vaivaa. Kiitos wikin tekijöille ja mukavaa loppukesää! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 15. elokuuta 2021 kello 15.57 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Foorumin kirjautuminen ==&lt;br /&gt;
Foorumin kirjautuminen taitaa taas olla rikki kun ei pääse tunnuksilla taaskaan sisään. Pääsin ainoastaan taas sisään vain Githubin tunnareilla, jotka eivät ole tietenkään samat. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 17. joulukuuta 2020 kello 23.10 (EET)&lt;br /&gt;
:Korjaantunut tai ohi mennyt, kolmella eri selaimella toimii minulla. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 18. joulukuuta 2020 kello 17.13 (EET)&lt;br /&gt;
&lt;br /&gt;
== Henkilökohtainen CSS ==&lt;br /&gt;
[[Käyttäjä:LinuxMan/css|Mokasinko pahasti tyylittelyssäni]], vai onko käyttäjäkohtainen CSS kiellettyä? --&amp;lt;small&amp;gt;[[Käyttäjä:LinuxMan|LinuxMan]] + [[Käyttäjä:LinuxMan/Chat|chat]]&amp;lt;/small&amp;gt; 12. marraskuuta 2020 kello 10.29 (EET)&lt;br /&gt;
&lt;br /&gt;
== Väärinkäyttöloki ei toimi ==&lt;br /&gt;
 [064aa995a537ddeecafaaa67] 2020-11-02 12:29:15: Vakava virhe, jonka tyyppi on ”Wikimedia\Rdbms\DBQueryError”&lt;br /&gt;
Tämän voisi korjata. --[[Käyttäjä:LinuxMan|LinuxMan]] tai [[Käyttäjä:LinuxMan/Chat|&amp;lt;small&amp;gt;chat&amp;lt;/small&amp;gt;]] 2. marraskuuta 2020 kello 14.30 (EET)&lt;br /&gt;
:Hups, tämä on jäänyt minulta huomaamatta. Ei äkkiseltään selvinnyt mistä tämä aiheutuu, mutta pitääpä korjata kun ehtii. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 16. maaliskuuta 2021 kello 22.49 (EET)&lt;br /&gt;
::No nyt toimii. Jostain syystä yksi olennainen tietokantamigraatio oli jäänyt ajamatta, vaikka niiden pitäisi pyörähdellä automaattisesti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 17. maaliskuuta 2021 kello 16.37 (EET)&lt;br /&gt;
&lt;br /&gt;
== Kölnin sininen ei toimi ==&lt;br /&gt;
Ulkoasu Kölnin sininen antaa vastaukseksi tyhjyyden. Minun piti itse kirjoittaa Asetukset-sivun osoitteeseen &#039;&#039;?useskin=vector&#039;&#039; jotta pääsisin pois valkoisesta ruudusta. --[[Käyttäjä:LinuxMan|LinuxMan]] tai [[Keskustelu käyttäjästä:LinuxMan|&amp;lt;small&amp;gt;keskustelu&amp;lt;/small&amp;gt;]] 8. lokakuuta 2020 kello 17.08 (EEST)&lt;br /&gt;
:Otin sen pois, ja laitoin Vectorin oletukseksi... Ainakin oma profiilini käytti vielä Monobook-teemaa, joka oli aika vanhahtava. Harkinnassa on, jos asentaisi jonkun [https://www.mediawiki.org/wiki/Category:Skins_based_on_Bootstrap nykyaikaisen teeman]. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 30. lokakuuta 2020 kello 13.47 (EET)&lt;br /&gt;
&lt;br /&gt;
== Mobiiliystävällinen ulkoasu ==&lt;br /&gt;
Maakuth ilmoitti foorumien puolella, että Wikiin on asennettu MobileFrontend-lisäosa (https://foorumi.linux.fi/t/mobiiliystavallinen-ulkoasu/2491) Suurin osa ulkoasusta toimii automaattisesti, mutta jotkin osat ovat rikki.&lt;br /&gt;
Ajattelin, että tähän alle voitaisiin tehdä lista sivuista ja mallineista, joilla on ongelmia mobiilinäkymän kanssa.&lt;br /&gt;
--[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 4. tammikuuta 2019 kello 21.16 (EET)&lt;br /&gt;
* [[Vice]]&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia ==&lt;br /&gt;
Tulee sisäinen virhe aina kun yrittää päivittää vanhaa kuvaa uudeksi tai yleensä yrittää tallentaa uutta kuvaa.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Sisäinen virhe&lt;br /&gt;
[3a911fe5f0b289c4dbc01057] 2018-12-19 18:38:38: Vakava virhe, jonka tyyppi on &amp;quot;TypeError&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
--[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 19. joulukuuta 2018 kello 20.45 (EET)&lt;br /&gt;
:Korjattu, kyse oli roskapostintorjuntalisäosan yhteensopivuusongelmasta. Kiitos ilmoituksesta! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 21. joulukuuta 2018 kello 09.00 (EET)&lt;br /&gt;
&lt;br /&gt;
== Vastustaako joku palvelinpuolen artikkeleiden kasvonkohotusta? ==&lt;br /&gt;
Huomasin, että tässä wikissä palvelimia koskeva tieto on hajallaan ja osin vanhentunutta.&lt;br /&gt;
&lt;br /&gt;
Vastustaako joku, jos muokkaan https://www.linux.fi/wiki/Palvelin -sivun ympärille etäpalvelinten hallintaa koskevan kokonaisuuden? Käyn läpi tyypillisiä palvelinpuolen sovelluksia, ajantasaistan niiden ohjeita.&lt;br /&gt;
Päivitin yhden artikkelin esimerkiksi: https://www.linux.fi/wiki/Apache_httpd&lt;br /&gt;
Artikkelissa on tehty seuraavat valinnat:&lt;br /&gt;
* käsitellään lähinnä Red Hat- ja Debian-pohjaisten palvelinten asetuksia. Muut jakelut jäävät paitsioon.&lt;br /&gt;
* prosessit hallitaan käyttäen systemd:tä - muihin tapoihin ei selkeyden vuoksi viitata.&lt;br /&gt;
* keskitytään ennen muuta siihen, mistä ohjelma löytyy järjestelmässä asentamisen jälkeen. Konfiguraatiovinkkejä on vähemmän.&lt;br /&gt;
* Pidetään mukana vanha, vähän outokin tauhka, kuten sähköisellä kortilla kirjautumisen mahdollistaminen. Monikohan tuota nykyään tekee?&lt;br /&gt;
&lt;br /&gt;
Kritiikkiä, huomioita tms näitä valintoja kohtaan?&lt;br /&gt;
&lt;br /&gt;
Siis: Kyllä palvelimen pystyttämiseen ja konfiguroimiseen tarvittava informaatio wikissä on, mutta se pitäisi koota paremmin yhteen. Nyt wikin näkökulma on voittopuolisesti omamme; Linuxia työpöytäjakeluna käyttävien ihmisten tietolähde. Haluaisin luoda Wikiin tulokulman, miten Windows- tai Mac-koneelta etänä kirjautuva voi järjestelmää käyttää. Eli lähinnä komentoriviltä käsin tapahtuvaa järjestelmän hallintaa. Se ehkä madaltaisi kynnystä tutustua järjestelmään muutenkin :)&lt;br /&gt;
--[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 13. marraskuuta 2018 kello 12.04 (EET)&lt;br /&gt;
&lt;br /&gt;
: Kyllä, ehdottomasti ainakin minun puolestani voi tehdä. Mielestäni wikin tarkoitus ei ole tosiaan kilpailla manuaalisivujen kanssa, vaan nimenomaan sisältää isompia hyödyllisiä kokonaisuuksia. Debian ja Red Hat on hyviä jakeluita tuon aiheen käsittelyyn, koska ne on suosituimmat palvelinjakelut. Samasta syystä muiden init järjestelmien, kuin systemd:n käsittelyn voi jättää pois.&lt;br /&gt;
: Pääasia on, ettei poista mitään tärkeää, koska joku voi tarvita juuri sitä tietoa. Toki olemassa olevia artikkeleita voi refaktoroida aina. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 13. marraskuuta 2018 kello 15.27 (EET)&lt;br /&gt;
&lt;br /&gt;
:: Palvelin-sivulle on nyt tehty kasvojen kohotus. Artikkeli muutettu käsittelemään palvelimen pystyttämistä. Mielipiteitä tästä?&lt;br /&gt;
::*[[Palvelin]]&lt;br /&gt;
::Haparoin tässä hiljalleen suuntaa, jonka pohjalta palvelinta käsitteleviä artikkeleita alan kehittää. Mietin mielessäni, miten järjestelmän perushallintaa käsittelevät artikkelit saisi luontevasti kokonaisuuden osaksi? Ne eivät kuulu pelkästään Palvelin-teeman alle. --[[Käyttäjä:Heikkiket|Heikkiket]] ([[Keskustelu käyttäjästä:Heikkiket|keskustelu]]) 27. marraskuuta 2018 kello 11.32 (EET)&lt;br /&gt;
&lt;br /&gt;
::: Hyvältähän tuo näyttää. Malline on vaikuttaa ihan hyvältä ratkaisulta, koska sillä saa nätisti nivottua artikkelit yhteen. Ei se haittaa, vaikka Palvelin-mallineen alla olisi &amp;quot;geneerisiä&amp;quot; artikkeleita, jotka eivät liity pelkästään palvelimiin. Mallineita voi myös tehdä lisääkin, jos keksii jotain hyviä. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 27. marraskuuta 2018 kello 23.10 (EET)&lt;br /&gt;
:::: Ihan hyvältä tuo näyttää. Ei vastusteta. Hyvä että jollakin on aikaa. --[[Käyttäjä:Lahtis|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;Lahtis&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Lahtis|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 30. marraskuuta 2018 kello 09.17 (EET)&lt;br /&gt;
::::: Tässä jälkihuomiona, en pitäisi sitä syntinä vaikka selkeyden, yksinkertaisuuden ja helposti ymmärrettävyyden ehdoilla mennäänkin, ettei tietoa alettaisi tarkoituksella supistamaan tai jopa välttelemään, kenties tarkempi nysvääminen [https://wiki.archlinux.org/index.php/Firefox ArchWikin Firefox-artikkelin] tyyliin [https://wiki.archlinux.org/index.php/Firefox/Privacy Firefox/Privacy]-aliartikkelihin. Tämä kommentti siis huomiona koko linux.fi:n kannalta eikä pelkästään palvelinta koskien. Vaikka systemd on vallannut käytännössä suurimman osan jakeluista, [https://en.wikipedia.org/wiki/Category:Linux_distributions_without_systemd ilman systemd]:tä porskuttaviakin jakeluita vielä on. --[[Käyttäjä:Foliohattu|Foliohattu]] ([[Keskustelu käyttäjästä:Foliohattu|keskustelu]]) 7. joulukuuta 2018 kello 01.14 (EET)&lt;br /&gt;
&lt;br /&gt;
== Onko tietoa muuan vuokrayhtiöstä joka mainostaa työpaikkojaan täällä jatkuvasti? ==&lt;br /&gt;
Onko kukaan tiettävästi saanut sitä kautta legittiä työtä? Aloin vain miettimään kun ne ilmeisesti bannattiin wikin puolelta.&lt;br /&gt;
:Bannasin sne kun työpaikkailmoituksia varten oikea paikka on foorumi ja pelkäsin, että joku sieltä alkaa pommittaa wikiä urakalla niillä ilmoituksilla. Ei ole kokemusta kyseisestä firmasta, paikkoja näkyy olevan paljon auki, mutta henkilöstövuokrauksestahan siinä taitaa olla kysymys. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 6. marraskuuta 2017 kello 14.30 (EET)&lt;br /&gt;
&lt;br /&gt;
== Palvelimem kello on väärässä ajassa ==&lt;br /&gt;
Sen huomaa Tuoreet muokkaukset-sivulla.&lt;br /&gt;
:Palvelimen kello näyttäisi olevan kyllä oikein, mutta oma aikavyöhykeasetuksesi saattaa olla pielessä, kannattaa tarkastaa wikin asetukset-sivulta. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 3. marraskuuta 2017 kello 11.26 (EET)&lt;br /&gt;
&lt;br /&gt;
== Tor-verkosta tulevat muokkaukset ==&lt;br /&gt;
Hyväksytäänkö tor-käyttäjät nykyään? Aiemmin tor-exit-nodet oli blokattu. Onko ne tarkoitus blokata myös joskus tulevaisuudessa? Voinko kehittää wikiä anonyymisti, torin kautta? Onko suositeltavaa että luon siihen tarkoitukseen käyttäjätilin?&lt;br /&gt;
&lt;br /&gt;
Kaikesta päätellen yritätte bannata tor-nodet. Esitän täten muodollisen vastalauseen sille. Ensinnäkin teette siinä huonoa työtä ja toiseksi se blokkaa myös legitit tor-käyttäjät, kuten minut. Miten olisi kompromissi, eli rekisteröityneet käyttäjät saisi muokata wikiä vapaasti vaikka käyttääkin tor-verkkoa? Tai että saisi muokata artikkeleiden keskusteluja ja ehdottaa sitä kautta muutoksia?&lt;br /&gt;
&lt;br /&gt;
:Ei täällä varta vasten estetä Torin käyttäjiä, vaan tiettävästi käytössä olevat suodatinlistat estävät ainakin osan Torin exit nodeista. Suodatinlistat taas ovat käytössä roskapostittajien takia. En ole ihan varma koskevatko nuo listat rekisteröitymättömien käyttäjien lisäksi myös rekisteröityneitä käyttäjiä, mutta ainakin itse pystyn muokkaamaan wikiä myös Torin läpi (saattaa toki johtua ylläpitäjän oikeuksista tai bannaamattomasta exit nodesta). Voin toki kysyä IRC:ssä josko olisi parempaa tietoa asiasta.&lt;br /&gt;
:Kannattaa myös huomioida se, ettei käyttäjätunnuksella tehtyjen muokkausten IP-osoitteet eivät näy muille &#039;&#039;käyttäjille&#039;&#039;, eli jos haluat ettei oma osoitteesi näy muille käyttäjille, et tarvitse Toria vaan pelkän käyttäjätunnuksen. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 25. lokakuuta 2017 kello 20.36 (EEST)&lt;br /&gt;
:Hmm, tarkoitus olisi kyllä että kirjautuneena käyttäjänä voisi muokata Torinkin läpi. Jos näin ei ole, niin pitääpä tarkistaa konfiguraatiota. Nimettömien käyttäjien suhteen on pakko pitää tiukempaa linjaa, sillä sotkun torjuntaan ei ole ainakaan minulla aikaa ja sitä kyllä riittää jos ei käytä blocklistejä. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 26. lokakuuta 2017 kello 12.02 (EEST)&lt;br /&gt;
::Tuntuu toimivan, tämäkin viesti tulee Torin läpi. Ja koska käytössä on https, niin myös myrkyllisten exit nodejen tapaukseltakin pitäisi olla suojaus. Erityisesti toria käytettäessä on syytä varmistaa että HTTPS-sertifikaatti on kunnossa! --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 26. lokakuuta 2017 kello 12.17 (EEST)&lt;br /&gt;
:::Äsken sai taas nähdä että joku exit node on mustalla listalla kun yritin muokata. Sain kuitenkin tilanteen korjattua uusimalla identiteetin.&lt;br /&gt;
Taas sama juttu kun muokkasin. Banni oli ikuinen ja syynä oli se että ippari oli open proxy.&lt;br /&gt;
&lt;br /&gt;
== [[Special:CreateAccount]] ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source line&amp;gt;Mink&amp;amp;auml; v&amp;amp;auml;rinen kruunu logon pingviinill&amp;amp;auml; on p&amp;amp;auml;&amp;amp;auml;ss&amp;amp;auml;? &amp;lt;/source&amp;gt; → &amp;lt;code&amp;gt;Minkä värinen kruunu logon pingviinillä on päässä? &amp;lt;/code&amp;gt; :) [[Käyttäjä:Nemo bis|Nemo bis]] ([[Keskustelu käyttäjästä:Nemo bis|keskustelu]]) 27. tammikuuta 2017 kello 21.40 (EET)&lt;br /&gt;
&lt;br /&gt;
:Joo näemmä ääkköset ei toimi. Laitoin viestiä eteenpäin, ehkäpä ylläpito korjaa kun muilta kiireiltään ehtii. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 28. tammikuuta 2017 kello 12.11 (EET)&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia havaittu ==&lt;br /&gt;
Linux.fin ilmoitusjärjestelmän tulevat muutokset sähköpostiin näkyvät tulevan http://localhost osoitteesta. Onkohan jokin mennyt rikki. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 13. elokuuta 2016 kello 14.00 (EEST)&lt;br /&gt;
:Tämän pitäisi nyt olla kunnossa. Muissa uutisissa päivitin sivustoa pyörittävän palvelimen uusimpaan Ubuntu LTS -versioon, olen kiinnostunut mahdollisista ongelmista joita tästä on seurannut. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 6. syyskuuta 2016 kello 21.46 (EEST)&lt;br /&gt;
::Näyttäisi ainakin toimivan. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 6. syyskuuta 2016 kello 23.08 (EEST)&lt;br /&gt;
&lt;br /&gt;
== RH-sertifikaatit ==&lt;br /&gt;
Olen mahdollisesti hankkimassa RHCSA-sertifikaatin nyt aluksi.&lt;br /&gt;
Kysymys kuuluukin että onko se hintansa arvoinen? Saako sillä oikeasti työtä, ja voiko esimerkiksi olla elinkeinoharjoittajana hoitamassa asiakkaiden järjestelmiä?&lt;br /&gt;
Ja onko koulutuksen järjestäjällä ja kurssimuodolla käytännössä merkitystä, eli onko väliä jos käy RH124+RH134, RH199 tai jonkun verkkokurssin ennen näyttöjä?&lt;br /&gt;
&lt;br /&gt;
:Kahvihuone on tarkoitettu wikiin liittyvälle keskustelulle. Foorumi muulle ---&amp;gt; [https://foorumi.linux.fi/ foorumi.linux.fi] --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 26. toukokuuta 2016 kello 13.31 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Uusi editori ==&lt;br /&gt;
En keksinyt miten tuon allekirjoitusnapin saa takaisin vanhaan editoriin, joten asensin uuden. Mutta ei sitä taida saada tähänkään. No, testailkaa ja kertokaa mitä pidätte, ilmeisesti [asetuksista|https://www.linux.fi/wiki/Toiminnot:Asetukset#mw-prefsection-editing] sen voisi saada pois päältäkin käyttäjäkohtaisesti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 11. huhtikuuta 2016 kello 20.06 (EEST)&lt;br /&gt;
:Ihan hyvältä vaikuttaa kun pikaisesti hiekkalaatikolla testasi. Kaipa tuohon allekirjoituksen lyhenteeseen &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt; täytyy vaan tottua. Kun vanhaan ei ole enää paluuta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. huhtikuuta 2016 kello 23.20 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Teknisiä ongelmia==&lt;br /&gt;
Tiedostojen tallennus ei taaskaan toimi. Missä vika? allekirjoitus ei toimi niin kuin pitäisi. 4. maaliskuuta 2016 kello 15.38 (EET)&lt;br /&gt;
:AbuseFilter-laajennus rikkoi näemmä tiedostojen lähetyksen päivityksen yhteydessä. Otin sen tilapäisesti pois päältä, nyt tuntuu taas toimivan. Allekirjoitusnappi on näemmä kadonnut, mutta tuolla sivun alussa kerrotulla syntaksilla allekirjoitus näkyy pelaavan. Katsotaanpa mistä sen napin saisi takaisin. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 4. maaliskuuta 2016 kello 17.35 (EET)&lt;br /&gt;
&lt;br /&gt;
Olen huomannut ku https yhteys tuli käyttöön. Aina kun artikkeliin lisää kuvan tai kuvia ja tallentaa kuvat palvelimelle niin artikkelin kuva ei päivity, vaan se jää aina tilaan &#039;&#039;Sivut, joilla toimimattomia tiedostolinkkejä&#039;&#039;. En tiedä mistä tämä johtuu. Mutta se on vähän häiritsevää. Ainutkierto tie on tallentaa koko artikkeli uudestaan ilman muutoksia. Sitten kuva päivittyy sivulle. Toinen huomio kahvihuoneessa ei ole allekirjoitus painiketta enää. Voisiko sen saada takaisin. Muualla allekirjoitus nappi löytyy. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 6. huhtikuuta 2016 kello 22.31 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Uusi foorumi==&lt;br /&gt;
Siirsin [http://foorumi.linux.fi foorumin] vanhasta SMF-järjestelmästä uuteen Discourseen. Ainakin &amp;quot;unohdin salasanani&amp;quot; -linkin kautta pitäisi vanhoilla tunnuksilla päästä sisään. Omasta mielestäni tuo foorumiohjelmisto näyttää selkeästi aikaisempaa paremmalta. Mitä mieltä te olette? --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 22. helmikuuta 2015 kello 14.36 (EET)&lt;br /&gt;
&lt;br /&gt;
Hienolta näyttää. Olin kyllä unohtanut koko foorumin olemassa olon jo. :)&lt;br /&gt;
[[Käyttäjä:Peisi1|Peisi1]] ([[Keskustelu käyttäjästä:Peisi1|keskustelu]]) 6. marraskuuta 2015 kello 08.07 (EET)&lt;br /&gt;
&lt;br /&gt;
==Päivityksiä==&lt;br /&gt;
Päivitin MediaWikin ja SMF-foorumiohjelmiston sekä kaiken alla hyrräävän käyttöjärjestelmän tuoreimpaan Ubuntun LTS-versioon. Ainakin täältä katsottuna tuntuu toimivan mallikkaasti. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 2. joulukuuta 2014 kello 16.03 (EET)&lt;br /&gt;
&lt;br /&gt;
==Mallineista==&lt;br /&gt;
Nuo ruskeat [[mallineet]] ovat kieltämättä rumia ja näyttävät aivan irrallisilta sivuilla. Muokkailen mallineita pikkuhiljaa vähän asiallisemman näköisiksi &amp;quot;&#039;&#039;yksinkertainen on kaunista&#039;&#039;&amp;quot; -filosofian mukaisesti. Jos joku malline rikkoo sivuja niin kannattaa mainita asiasta. --[[Käyttäjä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;oselotti&amp;lt;/font&amp;gt;]] ([[Keskustelu käyttäjästä:Oselotti|&amp;lt;font face=&amp;quot;fixedsys&amp;quot; color=&amp;quot;#333&amp;quot;&amp;gt;keskustelu&amp;lt;/font&amp;gt;]]) 1. kesäkuuta 2014 kello 23.11 (EEST)&lt;br /&gt;
:Mitkä ruskeat mallineet? Keltaisiahan suurin osa on. --[[Toiminnot:Muokkaukset/213.216.244.213|213.216.244.213]] 2. kesäkuuta 2014 kello 16.32 (EEST)&lt;br /&gt;
:: Niinpä. Muokkaajan keskustelusivulla epäiltiin värisokeutta. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 22. elokuuta 2014 kello 13.32 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia ==&lt;br /&gt;
Wiki on toiminut todella hitaasti tänään aamusta, ongelmaa selvitellään. Tietokantavirhettä ei toivottavasti enää tule. --[[Käyttäjä:Heikki|Heikki]] ([[Keskustelu käyttäjästä:Heikki|keskustelu]]) 23. huhtikuuta 2014 kello 07.18 (EEST)&lt;br /&gt;
:Tänäänkin esiintyi käyttökatkos. Luulisin, että vika on nyt pois päiväjärjestyksestä. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 30. huhtikuuta 2014 kello 19.15 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Danske Bank ==&lt;br /&gt;
Sivu [[Danske Bank]] pitäis varmaan lukita muokkauksilta, siellä käy niiden työntekijöitä (tai lapsia, tekstistä päätellen) raapustelamassa asiaankuulumatonta töhnää sivulle. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 26. lokakuuta 2013 kello 12.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Luokka suljettujen lisenssien softille? ==&lt;br /&gt;
&lt;br /&gt;
Mikä olisi sopiva nimi niille? --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 25. lokakuuta 2013 kello 17.56 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Televisiot, Digitaalisuus ja Linux - ajat muuttuu, pysyykö Wiki perässä? ==&lt;br /&gt;
&lt;br /&gt;
Aikoinaan oli analooginen TV ja tietokone. Sitten tuli analogisia viritinkortteja, itsellänikin on Hauppagen combo-kortti jossain jolla streemasin videota serveristä verkkoon. Seuraavassa aallossa [[Digiboksit_ja_Linux|digiboxit]] ja [[Linux_ja_digi-tv|digitaalisuus ryömi Linuxiinkin]] (tai [[DVD-elokuva_digiboksiin|elokuvaa tungettiin Linuxilla boxiin]]). Viimeisimmässä laineessa[[Taulutelevisiot| Linux ryömii telkkariin]], muun kulutuselektroniikan ohessa. Kaiken höysteeksi löytyy vielä asiaa sivuavat digitaaliset [[Elokuvapalvelut#Tv-_ja_tallennepalvelut|digi-tv palvelut]]. Wiki on tietysti seurannut aikaansa, mutta itselläni on tullut kutina, että jotain noista sivuista voisi nimetä uudelleen ja/tai sivujen sisältöä tarkastaa onko ne oikeilla sivuilla - noin ylipäätään tarkastella asiaa kokonaisuutena, vaikka mitään ei muuttaisikaan. Ylipäätään asiasta kiinnostuneet voisivat kertoa parannusehdotuksensa täällä ennen härdellimäistä remonttia. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 22.21 (EEST)&lt;br /&gt;
: Wikihän yrittää kaikin keinoin seurata aikaansa. Ainahan löytyy tarkastettavaa. Itse ainakin seuraan mm. [[elokuvapalvelut|elokuvapalveluiden]] kehitystä. Ja kulutan niitä. Tällä hetkellä osa sivustoista on aikamoisia listauksia, mikä toimii ja mikä ei. Listaukset ovat siinä hyvät että niistä näkee heti tukeeko jokin jotakin ja toimiiko se vai joutuuko sitä virittelemään.  Kehitysehdotuksia asiasta ei vielä ole. Asiaa täytyy miettiä. Kyllähän wiki pysyy perässä jos aktiivisia kirjoittajia löytyy. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. heinäkuuta 2013 kello 16.53 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Siirsin ainakin turhan &#039;&#039;linux&#039;&#039; sanan sisältävät sivut uusille nimille. Kokonaisuutta pitäisi varmaan ajatella vielä tulisiko sitä järjestellä enemmän. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 21. lokakuuta 2013 kello 12.49 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Yritys-malline ==&lt;br /&gt;
&lt;br /&gt;
Sellaista ei ole, mutta sellaisen voisi tehdä. Ei mitään tursuavaa kun ei kilpailla wikin kanssa, mutta muutamat perustiedot. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 17.47 (EEST)&lt;br /&gt;
* nimi&lt;br /&gt;
* logo&lt;br /&gt;
* liikevaihto?&lt;br /&gt;
* kotipaikka kaupunki / maa&lt;br /&gt;
* opensource sivusto?&lt;br /&gt;
* kotisivu&lt;br /&gt;
&lt;br /&gt;
: Vähän vastaava sivukin on katso esimerkiksi [[Valve Corporation]], [[Id Software]]n sivusto, joka on Perustietoa, Käsitteet ja Pelit luokassa. Piäisikö nämäkin sivut siirtää myös tähän luokkaan. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 10. heinäkuuta 2013 kello 19.27 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Tarkoitin mallinnetta, en luokkaa (class vs template). --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 21.36 (EEST)&lt;br /&gt;
::: Oho en huomannut, mutta tuollainenkin luokka oli jo valmiina. Voihan tuosta jonkin mallineenkin tehdä ainakin minun puolesta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 11. heinäkuuta 2013 kello 16.40 (EEST)&lt;br /&gt;
&lt;br /&gt;
: [[:Malline:Yritys]] on kyhäelmä aiheesta. Koeponnistuksessa parilla sivulla. Jos todetaan toimivaksi, malline pitäisi läiskiä kaikille [[:Luokka:Yritykset]]-sivuille. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 30. syyskuuta 2013 kello 13.21 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Google ja Googlen pakettivarasto ==&lt;br /&gt;
&lt;br /&gt;
Muihin vastaaviin sivuihin verrattuna sivu [[Google]] pitäisi siirtää historiansa kanssa sivuksi [[Googlen_pakettivarasto]] ja luoda uusi sivu [[Google]] jossa olisi firma lyhyesti ja sen &#039;&#039;Katso myös&#039;&#039; linkkaukset. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 17.19 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Voihan tuon Googlen siirtää yritys sivuksi ja luoda uusi Googlen pakettivarasto sivu. Kuulostaa ihan hyvältä idealta. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 10. heinäkuuta 2013 kello 19.23 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Tarkoitus oli säilyttää se historia sille kuuluvalle sivulle. Tarkkaavuutta näihin sisennyksiin, menee puurot ja vellit sekaisin. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 21.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Jakelu-mallinne parannuksia ==&lt;br /&gt;
&lt;br /&gt;
Dodanoin, voisko siihen lisätä esim &#039;&#039;elinkaaren pituus&#039;&#039; tms kentän josta selviäisi kuinka pitkään tuetusta jakelusta on kyse jos sellaisen päättää asentaa? --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 16.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
Ehkä &#039;&#039;toiminnallinen tila&#039;&#039; voisi olla enemminkin &#039;&#039;elinkaaren vaihe&#039;&#039; ja sen arvo voisi olla &#039;&#039;julkaisematon&#039;&#039;, &#039;&#039;tuettu&#039;&#039;, &#039;&#039;loppu&#039;&#039; (eol) tms. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 16.52 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Väärinkäyttösuodatin rikki ==&lt;br /&gt;
&lt;br /&gt;
Väärinkäyttösuodantinlaajennos vaikuttaisi olevan poissa toiminnasta, mikä selittänee viimeaikaisen spämmiaallon. --[[Käyttäjä:Pb|Pb]] ([[Keskustelu käyttäjästä:Pb|keskustelu]]) 9. heinäkuuta 2013 kello 16.41 (EEST)&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;&amp;quot;Linux.fi:n mainossuodatin on estänyt sivun tallentamisen.&amp;quot;&#039;&#039;&#039; - mitäs jos heitätte noi ritsat pois täältä ja suljette sen avoimen editoinniin. En jaksa pelleillä ko käkättimen kanssa kun a) ne haittaavat sisällön tuottamista b) ne eivät estä tätä paskan vyörymistä mitä on logista nähtävissä. Tämä wiki vain edesauttaa spämmin leviämistä palkitsemalla spämmääjiä kun roska roikkuu verkossa päivästä toiseen. Märkä uni, että sotkujen siivoajia riittäisi vastaamaan joka töherrykseen. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 15.34 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Vika on näemmä 7 vuotta vanha, voi ei. --&amp;lt;span style=&amp;quot;font-family: monospace; text-shadow: 3px 3px 2px red;&amp;quot;&amp;gt;[[Käyttäjä:LinuxMan|LinuxMan]] + [[Käyttäjä:LinuxMan/Chat|chat]]&amp;lt;/span&amp;gt; 16. marraskuuta 2020 kello 09.05 (EET)&lt;br /&gt;
&lt;br /&gt;
== Jolla ==&lt;br /&gt;
&lt;br /&gt;
Ehkä hieman omituista, että Jolla mobile on suhteellisen suomalaista alkuperää ja linux.fi:ssä ei ole siitä minkäänlaista mainintaa, saati sitten seikkaperäisempää sepustusta. Pitäisikö asialle tehdä jotain? Meegon tarina voisi olla myös paremmin esitettynä, itse [[meego]] sivu ja linux-puhelimet sivu sisältää asioita joiden sijaintia voisi siirrellä ja &#039;&#039;pääartikkeli&#039;&#039;maisesti linkitellä. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 9. heinäkuuta 2013 kello 12.04 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Ehkäpä joutuu siitä että kukaan ei ole sitä vielä tehnyt. Sinä voisit olla ensimmäinen?? ;) --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 9. heinäkuuta 2013 kello 17.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
:: Mutta kun haluaisin itse enemminkin kuluttaa sitä tekstiä. :) Luulen, että sen veistämiseen löytyy parempia kavereita. Noin niinkuin yhteisönä, tämä aihe ei ole kiva-olla-olemassa vaan vähän niinkuin pitäis olla jos suomalaiset ripustaa tämäntyyppisen linux-tietopankin nettiiin Suomessa. Vähän sama kun Lapista ei löytyis mitään kirjoitettua materiaalia Joulupukista. --[[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 10. heinäkuuta 2013 kello 13.48 (EEST)&lt;br /&gt;
&lt;br /&gt;
: Sailfish-käyttöjärjestelmästä nyt ainakin voisi olla jotain, kunhan se nyt ensin julkaistaan. [[Käyttäjä:Oselotti|Oselotti]] ([[Keskustelu käyttäjästä:Oselotti|keskustelu]]) 10. heinäkuuta 2013 kello 14.02 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Lähdekoodiasennus ja Jakelukohtaista ==&lt;br /&gt;
&lt;br /&gt;
Nykyinen trendi on asentaa jokin pitkälle viimeistelty ja suosittu jakelu joka käyttää jotain pakettijärjestelmää ohjelmavalikoiman hallintaan. Jakeluiden ohjelmavalikoimat ovat kasvaneet vuosien mittaan ja lähdekoodista asentaminen on yhä harvinaisempaa. Wikin sivuista valtaosa käsittelee yksittäistä ohjelmaa ja usein myös lähdekoodista asentamista. Prosentuaalisesti lähdekoodin asennusohje vaiheineen vie sivusta paljon tilaa ja toisaalta ajan myötä käsin asentamisen merkitys vähenee. Tilan viemisen ohella lähdekoodiohjeet vievät myös huomiota muulta sisällöltä. Toisaalta, harvassa sivussa mainitaan tietoja joita nykyään lukija etsii ja tarvitsee: tarkka paketin tai pakettien nimet omalle jakelulleen. Ylläoleva huomioiden, lähdekoodi-asennusohjeissa on paljon hyödyllisiä, aikaasäästäviä ja yksityiskohtaisia ohjeita jos niitä todella tarvitsee.&lt;br /&gt;
&lt;br /&gt;
Koska Wikin on tarkoitus palvella lukijaansa ja vastata aikaansa, ehdotan seuraavaa:&lt;br /&gt;
* Asennusohjeet lähdekoodeista siirretään omaan, ohjelmaa käsittelevän sivun alasivuksi.&lt;br /&gt;
* Alasivun nimi on linux.fi/wiki/Xbmc/Asennus_X jossa X on? Ehdotuksia? Skandiongelma?&lt;br /&gt;
* Alasivuun viitataan kappaleessa &#039;&#039;Katso myös&#039;&#039;.&lt;br /&gt;
* Joka ohjelman sivulle lisätään loppuun toisen tason kappale otsikolla &#039;&#039;Jakelukohtaista&#039;&#039;&lt;br /&gt;
* Jakelukohtaista kappaleen alle jakelukohtaiset ohjeet kolmannen tason otsikolla joka on jakelun nimi.&lt;br /&gt;
* Jakelukohtaisessa kappaleessa mainitaan vähintään:&lt;br /&gt;
** paketin tai pakettien tarkka nimi boldattuna.&lt;br /&gt;
** viittaus paketinhallintajärjestelmän sivuun.&lt;br /&gt;
** viittaus pakettivarastoon jos se poikkeaa oletuksista.&lt;br /&gt;
* Käytäntö ohjeistetaan Wikin muokkausohjeissa.&lt;br /&gt;
&lt;br /&gt;
Muutoksen yhteydessä kannattaisi ehkä muokata ohjelman infoboxia ja mahdollisesti hyödyntää muita mallinteita? [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 13. toukokuuta 2013 kello 13.14 (EEST)&lt;br /&gt;
 &lt;br /&gt;
:* Sivuistahan on yritetty tehdä jakeluriippumattomia. Ainakin mitä minä olen törmännyt joihinkin lähdekoodeista asennettaviin ohjelmiin niin silloin kun olen esimerkikisi ohjeen raapustanut tänne. Ei ole ollut muita vaihtoehtoja ko. ohjelman asentamiseen (ei löydy mistään pakettivarastosta), mutta jos haluat näin menetellä niin siitä vaan.&lt;br /&gt;
:* Yleensä ohjelman tarkka nimi sanotaan ohjeen alussa tai &#039;&#039;&#039;Asenna&#039;&#039;&#039; kohdassa siellä voi olla tietoa myös jakelukohtaisesta nimestä. Jos pakettia ei löydy omalle jakelulle niin lähdekoodeistahan se on asennettava.&lt;br /&gt;
:* Alasivuissa on myös yksi ongelma. Olen huomannut että jotkin käyttäjät eivät viittaa ohjelmiin &#039;&#039;&#039;Katso myös&#039;&#039;&#039; kohdassa. Ja näin koko alasivujen hyöty hukkuu massaan. Kun niitä ei tavallaan löydä. (samoin joiltakin unohtuu luokkien käyttö).&lt;br /&gt;
:* Jakelukohtaista. -&amp;gt; Sivuistahan on yritetty ja tehdään mahdollisimman jakeluriippumattomia. Eli en näe ainakaan tässä järkeä.&lt;br /&gt;
:--[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 13. toukokuuta 2013 kello 13.32 (EEST)&lt;br /&gt;
::Minusta Tujulla on siinä hyvä pointti, että asennusohjeiden määrä sivuilla on vähän häiritsevä ja vie huomiota hyödyllisiltä asioilta. Minusta kuitenkin tuo /-viivalla erotettu alasivu tuntuu kömpelöltä ratkaisulta ja esitän että asennusohjeet laitettaisiin oman otsikkonsa alle ja oletusarvoisesti piiloon [https://www.mediawiki.org/wiki/Extension:CollapsableText CollapsableText]-laajennuksen avulla. Näin asennusohjeet olisivat pois häiritsemästä, mutta nopeasti ja näppärästi saatavissa. Näitä varten voitaisiin tehdä asennusohjeet-malline, joka vakiinnuttaisi tuon asian ulkoasun. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 17. toukokuuta 2013 kello 23.42 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Ajatus lähti sisällön yhtenäistämisestä ja käytettävyydestä: Nykyisellään focus on harvemmin tarvittavassa tiedossa joka vie toisilla sivuilla paraatipaikan ja toisaalta yhtenäisen käytännön puute ei kannusta eikä painota puuttuvien, oleellisten tietojen lisämistä (pakettien nimet eri jakeluille), esitetty ratkaisuvaihtoehto oli vain ensimmäinen mieleen tullut. Painottaisin vielä, että ehdotuksessani oli kaksi osaa: Tilaa vievän lähdekoodiasennusohjeen muutos ja Jakelukohtaista kappaleen lisääminen. Nämä ovat kaksi eri asiaa, vaikkakin sivuavat toisiaan.&lt;br /&gt;
&lt;br /&gt;
:::Ehdotettu CollapsableText voisi ajaa asian. Pistää mietityttämään sivulla mainittu varoitus &#039;&#039;live sivuilla&#039;&#039; käytöstä. Linux on perinteisesti ollut ratkaisu joka toimii vanhemmilla laiteistolla ja toisaalta mm selaimien kirjo ja selainspecifisten ominaisuuksien tuki ollut vähäistä. Eli miten tuo sitten toimisi esim Lynxin tai keveiden työpöytien+selaimien käyttäjille? Perustuuko se Java/Ecma-Scriptiin? Kyse on laajennoksesta, mikä elinkaariennuste sen saatavuudelle on tuleviin päivityksiin? Ehdottamani alasivu olisi staattista tekniikkaa eikä sen suhteen ilmeisesti ole riskiä toimivuudesta. Asia tulisi varmistaa jos käytäntö otetaan käyttöön valtaosalla ohjelma-sivuja.&lt;br /&gt;
&lt;br /&gt;
:::Lähdekoodiohjeiden osalta näkisin asian myös parannuksena. Kun niillä on oma paikkansa, kynnys isompienkin ja tilaa vievien listauksien ja tulosteiden käyttöön laskisi ja siten niiden informaation määrä ja käyttöarvo kasvaisi. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 18. toukokuuta 2013 kello 12.17 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Voisiko tota CollapsableText laajennusta kokeilla jossakin hiekkalaatikkosivulla tai ulkosella saitilla? Miten se vaikuttaisi esim tulostukseen? Todennäköisesti se on vähäistä eikä sille kannata panna paljon painoarvoa, mutta ehkä lähdekoodiasennus voisi olla sellainen jossa sitä joskus käytetään. Matkapuhelimet ja tabletit kannattaisi myöskin testata samalla. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 18. toukokuuta 2013 kello 13.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Tarkemmin katsottuna tuo laajennus näkyy olevan rikki, eikä se toimi nykyisellä MediaWikillä. Mutta vastaavan saa tehtyä jo valmiina mukana tulevalla jQuery-palikalla, laitoin sen [[Linux.fi:Kahvihuone|kahvihuoneeseen]] kokeiluun. Lopputulos näyttää tavallisella selaimella ihan asialliselta, eikä [https://dl.dropboxusercontent.com/u/221630/lynx-collapsible.png lynxilläkään] hullummalta. Jakelukohtaista-osan tekeminen on varmaan ihan paikallaan myös. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 18. toukokuuta 2013 kello 23.07 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Voihan tuota laajennosta kokeilla. Mutta itse olen aina ihmetellyt miksi useilla saiteilla asennusohjeet ovat piilotettu CollapsableTextillä tosi typerästi. Itse en pidä siitä yhtään. Miksi tekstiä pitäsi sivuilla piilottaa. Tuosta focuksesta. Jos sivun luoja EI VAAN halua (pysty, jaksa tai huvita) kirjoitaa ohjelmasta oikein minkäänlaista tekstiä. Esimerkiksi ohjelman sivun focus näyttää olevan joillakin käyttäjillä se että sieltä on vain käytännössä linkki ohjelman kotisivulle (lukekaa sieltä). Ei sivut ovat tosi tylsiä. (pelkkä listauskin olisi parempi.) Ei siinä paljon focukset ja käytettävyydet paljon siten paina. Jos sivuilla ei ole paljon mitään. Niin pelkkä asennusohjekin on herkkua. --[[Käyttäjä:Lahtis|Lahtis]] ([[Keskustelu käyttäjästä:Lahtis|keskustelu]]) 20. toukokuuta 2013 kello 11.43 (EEST)&lt;br /&gt;
&lt;br /&gt;
::::Kyllä tässäkin on pointtinsa. Jos sivu on aluillaan eikä ne sorsa-ohjeet ole pitkät niin voihan se toimia alkuvaiheessa tuomaan lihaa luiden päälle. Toisaalta se saattaa vaikuttaa käänteisesti, että sivu näyttää jo suhteellisen täyteläiseltä eikä kutkuta potentiaalisia kirjoittajia vaikka asiasta jotain tietäisivätkin. Alkuperäinen dilemma, että ajat muuttuu ja lähdekoodiohjeita ei juurikaan tarvita vain korostuu jos sivu on aluillaan ja 99,78% prosenttia sisällöstä on mitä ei etsitä eikä lueta.&lt;br /&gt;
&lt;br /&gt;
::::Jos juuri aloitettu sivu tuntuu tyhjältä, ehdotettu käytäntö tuo jatkossa joka sivulle uuden kappaleen ja sen alakappaleet monelle jakelulle. Sen sijaan, että tyhjyyttä täytetään tekstimassalla jota 99% ei lue, kirjoittaja voisi jatkossa laittaa ohjelmasta vaikka kuvakaappauksen joka piristää sivua jo kummasti. &lt;br /&gt;
&lt;br /&gt;
::::Valtaosa nykyisestä yhteisöstä lukee alkuperäisiä sivuja vaivatta, mutta silti itsekkin etsin suomenkielisestä wikistä usein ideoita ohjelmiksi johonkin tarkoitukseen (kuten taloushallinto-ohjelmiin viimeeksi). Siten pelkkä sivun olemassaolo linkkeineen ja pakettien nimineen on jo paljon ja säästää aikaa. Jos tätä hyödyllisyyden tunnetta ei saavuteta, linux.fi ei ole se ensimmäinen paikka etsiä tietoa.&lt;br /&gt;
&lt;br /&gt;
::::Noin ylipäätään suhtaudun sivuihin pragmaattisesti:&lt;br /&gt;
::::* Sivut eivät ole minun henkilökohtaisia. Niitä voi ja pitää muidenkin muokata. Sama pätee muihin sivuihin.&lt;br /&gt;
::::* Jos sisällöstä ollaan eri mieltä, kädenvääntö käydään sen argumenteilla, ei sillä kuka sen on aloittanut tai viimeeksi muokannut.&lt;br /&gt;
::::* Wiki liikkuu eteenpäin pienillä incrementaalisilla muutoksilla eikä sisällön tavoitteet (rakenne, halutut sivut, jne) riipu siitä mitä yksittäinen osallistuja jättää systemaattisesti tekemättä, missä vaiheessa toteutusta ollaan tai miten kaukana tavoite on. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 20. toukokuuta 2013 kello 13.55 (EEST)&lt;br /&gt;
&lt;br /&gt;
Noin sivuhuomiona: Kokisin, että jakelut ovat nykyään jo niin pitkälle kehittyneitä, että lähdekoodiasennusohjeiden sijaan yhteisön jäseniä kannustettaisiin paketoimaan kyseinen ohjelma käyttämäänsä jakeluun suoraan. Käsinasennusohjeiden tekeminen on vähän kuin pätsääminen jakelutasolla - sen sijaan, että asiantuntevat työtunnit tehtäisiin upstreamissa josta ne ovat helposti hyödynnettävissä isoihin massoihin.&lt;br /&gt;
* Käyttäjäkunta laajenee paljon enemmän helpottamalla asennuksia (jakelu siirtyy taviksia kohti, toteutettavissa), kuin opettamalla loppukäyttäjät kääntelemään sorsia (tavikset siirtyy jakelua kohti, hankalaa).&lt;br /&gt;
* Työmäärässä ei ole juurikaan eroa.&lt;br /&gt;
* Käännösohjeet pysyvät väkisin ajantasalla kun jakelu joko kääntää tai hylkää ne. Wikissä vastaavaa pilkuntarkkaa ja toistuvaa mekanismia ei ole. Seurauksena sisältö vanhenee nopeasti kun sen ajantasaisuutta on hankala tarkistaa. -- [[Käyttäjä:Tuju|Tuju]] ([[Keskustelu käyttäjästä:Tuju|keskustelu]]) 20. toukokuuta 2013 kello 14.09 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Palvelimen päivitys ==&lt;br /&gt;
Linux.fi muuttaa uudelle palvelimelle tänä viikonloppuna. Muutoksen myötä wikin käyttäjiä pystytään palvelemaan monipuolisemmin ja joustavemmin. Jee! --[[Käyttäjä:Maakuth|Maakuth]] 25. huhtikuuta 2013 kello 23.13 (EEST)&lt;br /&gt;
:Tämä on nyt tehty ja tuntuu toimivan. Ilmoitelkaa jos huomaatte että jokin on rikki. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 28. huhtikuuta 2013 kello 00.29 (EEST)&lt;br /&gt;
::Yksi tunnettu vika on, nimittäin pienoiskuvat eivät kaikkialla näy (esimerkkinä [[KDE tutuksi]]). Tätä koitetaan selvittää mahdollisimman pian. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 1. toukokuuta 2013 kello 14.49 (EEST)&lt;br /&gt;
:::No niin, selvisihän se lopulta. Mainittakoon että &amp;lt;tt&amp;gt;$wgTmpDirectory&amp;lt;/tt&amp;gt;-muuttuja MediaWikin asetuksissa osotti vanhastaa johonkin epäsopivaan paikkaan. Alkoi toimia kun poistin sen määrityksen kokonaan, oletusasetukset periytyvät jostain muualta. Nyt tietääkseni kaikki on kunnossa. Ilmoitelkaa jos keksitte jotain muita ongelmia. --[[Käyttäjä:Maakuth|Maakuth]] ([[Keskustelu käyttäjästä:Maakuth|keskustelu]]) 11. toukokuuta 2013 kello 16.21 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Ongelmia kirjautumisessa ==&lt;br /&gt;
Näyttää siltä että kirjautuminen ei toimi ainakaan kaikilla käyttäjillä. Vikaa selvitellään.... --[[Käyttäjä:Heikki|Heikki]] 8. maaliskuuta 2013 kello 00.32 (EET)&lt;br /&gt;
:Korjattu. Vika johtui epäonnistuneesta päivityksestä uudempaan Mediawikiin, jonka jälkeen jouduin palauttamaan vanhan version ja tietokanta meni vähän solmuun. Nyt pitäisi kuitenkin toimia. Kiitokset Otolle vian ilmoittamisesta, oli jäänyt itseltä huomaamatta kun sitä on kuitenkin aina automaattisesti kirjautuneena sisään. --[[Käyttäjä:Heikki|Heikki]] 8. maaliskuuta 2013 kello 23.22 (EET)&lt;br /&gt;
&lt;br /&gt;
==Viimeaikaiset spämmimuokkaukset==&lt;br /&gt;
Tein [[Toiminnot:Väärinkäyttösuodatin/8|uuden väärinkäyttösuodattimen]], jonka pitäisi estää viimeaikaisen tyyppiset spämmimuokkaukset (ja vain ne). Suodatin on kierrettävissä lisäämällä muokkausyhteenvetoon sana &amp;quot;suodatin&amp;quot;. --[[Käyttäjä:Pb|Pb]] 22. huhtikuuta 2012 kello 22.43 (EEST)&lt;br /&gt;
:Tuo ei ollutkaan tarpeeksi tehokas, joten tein [[Toiminnot:Väärinkäyttösuodatin/9|uuden]] (hieman eri lähestymistavalla) ja poistin ylläolevan käytöstä. --[[Käyttäjä:Pb|Pb]] 23. huhtikuuta 2012 kello 01.34 (EEST)&lt;br /&gt;
::Edelleen tein suodattimen, joka estää viimeaikaiseen bottikaavaan (iso kirjain + 2-15 pientä kirjainta + iso kirjain + 2-15 pientä kirjainta + 2-4 numeroa) pohjautuvien käyttäjätunnusten luonnin. Onko tuon päälläolo OK? --[[Käyttäjä:Pb|Pb]] 23. huhtikuuta 2012 kello 21.22 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Spämmibottitunnusten luonnin esto==&lt;br /&gt;
Spämmibotin luomia uusia käyttäjätunnuksia näyttää tulevan aika iso määrä per päivä. Yksi tapa päästä niistä eroon olisi [http://www.mediawiki.org/wiki/Extension:TitleBlacklist TitleBlacklist]-laajennoksen (ei riippuvaisuuksia, merkitty vakaaksi) asentaminen, jolla voi estää tiettyyn säännölliseen lausekkeeseen sopivien käyttäjätunnusten tai sivunnimien luonnin. &lt;br /&gt;
&lt;br /&gt;
Etunimi+Sukunimi+2-4 numeroa -tyyppisten käyttäjätunnusten esto onnistuisi TitleBlacklist-laajennoksen kanssa esimerkiksi lisäämällä rivin&lt;br /&gt;
 User:&amp;lt;nowiki&amp;gt;[A-Z][a-z]{2,15}[A-Z].{2,15}[0-9]{2,4}&amp;lt;/nowiki&amp;gt; &amp;lt;casesensitive&amp;gt;&lt;br /&gt;
järjestelmäviestiin [[Järjestelmäviesti:Titleblacklist|Titleblacklist]]. --[[Käyttäjä:Pb|Pb]] 4. joulukuuta 2011 kello 21.05 (EET)&lt;br /&gt;
:Päädyin asentamaan reCaptchan Wikipediasta tutuilla asetuksilla, eli rekisteröinti tai rekisteröimättömänä muokkaus vaatii captcha-tunnistuksen läpäisyä. Katsotaan miten toimii. Regexp-suodatushan ratkaisisi tämän nykyisin vaivaavan botin, mutta sitten sitä joutuisi taas hienosäätämään seuraavaa varten, toivotaan että tämä ratkaisu pelaisi pitempään. --[[Käyttäjä:Maakuth|Maakuth]] 7. joulukuuta 2011 kello 12.03 (EET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Linkitys kielletty uusilta käyttäjiltä==&lt;br /&gt;
Viimeaikaisten spämmien takia loin [http://linux.fi/wiki/Toiminnot:V%C3%A4%C3%A4rink%C3%A4ytt%C3%B6suodatin/6 uuden väärinkäyttösuodattimen ehdon] joka estää uusia käyttäjiä lisäilemästä linkkejä. Katsotaan miten toimii ja otetaan vaikka pois päältä jos tuo aalto päättyisi. --[[Käyttäjä:Maakuth|Maakuth]] 21. marraskuuta 2011 kello 13.06 (EET)&lt;br /&gt;
&lt;br /&gt;
:Lisäsin tuohon sellaisen ominaisuuden, että linkin lisäys onnistuu uusiltakin käyttäjiltä, jos muokkausyhteenvetoon kirjoittaa sanan &amp;quot;suodatin&amp;quot;. Tämän pitäisi estää spämmibottien muokkaukset, mutta sallia muiden tekemät. --[[Käyttäjä:Pb|Pb]] 21. marraskuuta 2011 kello 17.13 (EET)&lt;br /&gt;
&lt;br /&gt;
::Hyvä juttu. Tein vielä toisen suodattimen, joka estää uusilta käyttäjiltä sivujen luonnin kokonaan. Tarkkaillaanpa liikennettä ja otetaan pois jos mahdollista. --[[Käyttäjä:Maakuth|Maakuth]] 22. marraskuuta 2011 kello 19.54 (EET)&lt;br /&gt;
&lt;br /&gt;
== Foorumi päivitetty==&lt;br /&gt;
[http://linux.fi/foorumi Keskustelualue] päivitettiin SMF:n uuteen versioon. Ilmoitelkaa, jos foorumi ei toimi normaalisti. Jos saat virheen &amp;quot;Template parse error&amp;quot;, kokeile poistaa evästeet. --[[Käyttäjä:Heikki|Heikki]] 15. syyskuuta 2011 kello 08.28 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Kuvien kanssa ongelmia ==&lt;br /&gt;
Jotkut kuvat/pienoiskuvat eivät näkyneet, sillä kuvien [[chmod|tiedosto-oikeudet]] olivat väärin palvelimella. Nyt kaikkien pitäisi toimia. --[[Käyttäjä:Heikki|Heikki]] 30. elokuuta 2011 kello 08.53 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Päivitys ==&lt;br /&gt;
Päivitin wikin versioon 1.17. Samalla tuli käyttöön uusi ulkoasu. Ilmoitelkaa jos jotain hajosi. --[[Käyttäjä:Heikki|Heikki]] 3. elokuuta 2011 kello 21.35 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Päivitys ==&lt;br /&gt;
Mediawiki päivitetty versioon 1.16.4. Ilmoitelkaa jos on ongelmia. --[[Käyttäjä:Heikki|Heikki]] 18. huhtikuuta 2011 kello 18.13 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Mallineiden luokitus ==&lt;br /&gt;
Kaikki mallineet tulisi luokitella luokkaan [[:Luokka:Mallineet|mallineet]]. Näin niiden löytäminen helpottuisi huomattavasti. --[[Käyttäjä:Kalakeitto Kilju|Kalakeitto Kilju]] 10. huhtikuuta 2010 kello 18.41 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Palvelin ==&lt;br /&gt;
Mahdollisesti off-topicia, mutta millä tavalla tarkemmin ottaen on Linux.fi:n tekninen puoli toteutettu? Minun käsityksen mukaan web-hotelli olisi aikalailla käytäntö jos tällaista halutaan, mutta ilmeisesti teillä on joku oma palvelinkone siellä? -Cerre10. huhtikuuta 2010 kello 19.40 (UTC)&lt;br /&gt;
&lt;br /&gt;
Ja ja. Hyvän tavan mukainen &amp;lt;nowiki&amp;gt;--~~~~~&amp;lt;/nowiki&amp;gt;-merkintä ei tunnu toimivan, ainakaan minulla.&lt;br /&gt;
:Palvelinpuoli on hyvällä mallilla. Tehokkaan palvelimen ja riittävästi kaistaa tarjoavat sivulla [[Linux.fi:Tietoja]] mainitut tahot. Samalla palvelimella on Linux.fin lisäksi myös muutamia muita sivustoja. --[[Käyttäjä:Heikki|Heikki]] 11. huhtikuuta 2010 kello 04.28 (UTC)&lt;br /&gt;
::Juuripa näin, uusi palvelinkonekin tuli varsin hiljattain käyttöön. --[[Käyttäjä:Maakuth|Maakuth]] 11. huhtikuuta 2010 kello 12.18 (UTC)&lt;br /&gt;
:::Siis tarkoitan että voiko palvelinkoneesta antaa ulos tarkempia speksejä? Mihin on kytketty verkkoon, ja ilmeisesti nimenomaan runkoverkkoon? Tuskin kotiin saa niin järeän liittymän kun toimivan wikin pitäminen vaatii. Jopa 10/10-kuitu lienee tarkoitukseen aika laiha.&lt;br /&gt;
:::Juttu on siis siinä että minäkin saan kotiini vanhan palvelinkoneen kuluvan kuukauden aikana, ja haluan vähän vertailla asioita. Aion käyttää sitä Debian- ja Opensuse-seedboxina sekä reitittimenä. Jos oikein innostun niin lähden keräämään vanhoja (kannettavia) tietokoneita, ja laitan ne työskentelemään BOINC-projektin hyväksi. Sonera hyväksyy viisi konetta yhden liittymän taakse, mutta tämä lienee ohitettavissa omalla aliverkolla. --Cerre 12. huhtikuuta 2010 kello 16.34 (UTC)&lt;br /&gt;
::::Kaistaa on käytössä tarpeeksi, en edes tiedä yksityiskohtia. Sinänsä Linux.fi ei paljoa aiheuta liikennettä kun suurin osa sisällöstä on tekstiä. Viime kuukausina kaistaa on kulunut n. 10-11gt, kun eri kävijöitä on ollut n. 30 000 ja sivulatauksia n. 500 000. Vääntöä tarjoaa kasa Xeon-ytimiä ja muistia on gigatavukaupalla. Käyttiksenä on [[CentOS]]. --[[Käyttäjä:Heikki|Heikki]] 12. huhtikuuta 2010 kello 16.42 (UTC)&lt;br /&gt;
&lt;br /&gt;
Harmittaa että jotkut artikkeleista ovat vanhentuneita. Esim Sub.fi ja Jimtv.fi sivustoilta ei voi katsella enää ohjelmia suoraan vaan Jimtv.fi ohjelmat löytyvät nykyään Ruutu.fi sivustolta ja sub.fi sivuston ohjelmat MTV Katsomosta --[[Käyttäjä:Pyscowicz|Pyscowicz]] ([[Keskustelu käyttäjästä:Pyscowicz|keskustelu]]) 22. marraskuuta 2014 kello 10.36 (EET)&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Peliohjaimet&amp;diff=54084</id>
		<title>Peliohjaimet</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Peliohjaimet&amp;diff=54084"/>
		<updated>2021-10-24T08:06:03Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kuva:Ilotikku.png|right|200px]]&lt;br /&gt;
Monet [[USB]]-väylään kytkettävät peliohjaimet (erityisesti pad-ohjaimet) toimivat suoraan Linuxissa. Monissa peleissä voi myös suoraan käyttää pad-ohjaimia, ratteja ja lentotikkuja. [[Wine]]n kautta ajettavissa peleissä peliohjaimet eivät yleensä toimi suoraan. Yleisimmät Xboxin, Logitechin, Thrustmasterin ja Sony PlayStationin peliohjaimet ovat hyvin tuettuja esimerkiksi [[Steam]]in kautta jaetuissa peleissä. Joissain tapauksissa voit joutua asentamaan ajurin järjestelmääsi, mikäli jakelu ei ole [[Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
Näitä ajureita ovat mm.&lt;br /&gt;
* xboxdrv (Xbox 360, PS3)&lt;br /&gt;
* joystick ja jscalibrator (Logitech Rumblepad 2)&lt;br /&gt;
* [https://steamcommunity.com/sharedfiles/filedetails/?id=142372419 How to get Logitech steering wheels working properly on Ubuntu]&lt;br /&gt;
 &lt;br /&gt;
[[Frets on Fire]] -pelissä käytettävä Guitar Hero -kitara tarvitsee PS2/USB-adapterin. &lt;br /&gt;
&lt;br /&gt;
Ensimmäisen järjestelmään liitetyn peliohjaimen [[laitetiedosto]] on yleensä &amp;lt;tt&amp;gt;/dev/input/js0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Hiiri]]&lt;br /&gt;
*[[Näppäimistö]]&lt;br /&gt;
*[[Peliohjaimen kalibrointi]]&lt;br /&gt;
&lt;br /&gt;
==Aiheesta muualla==&lt;br /&gt;
* [http://www.makeuseof.com/tag/get-game-controllers-running-linux/ How to Get Game Controllers Running on Linux]&lt;br /&gt;
* [https://support.feralinteractive.com/en/guides/linux_gamepad/ How to set up a game controller in Linux]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Pelit]]&lt;br /&gt;
[[Luokka:Laitteisto]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Peliohjaimen_kalibrointi&amp;diff=54083</id>
		<title>Peliohjaimen kalibrointi</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Peliohjaimen_kalibrointi&amp;diff=54083"/>
		<updated>2021-10-24T08:01:30Z</updated>

		<summary type="html">&lt;p&gt;Peran: Ak: Uusi sivu: ==Peliohjaimen kalibrointi== Peliohjaimen kalibrointi tapahtuu helpoiten jstest-gtk ohjelmalla, jonka saattaa joutua asentamaan järjestelmään. &amp;lt;pre class=&amp;#039;terminal&amp;#039;&amp;gt; jstest-gtk...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Peliohjaimen kalibrointi==&lt;br /&gt;
Peliohjaimen kalibrointi tapahtuu helpoiten jstest-gtk ohjelmalla, jonka saattaa joutua asentamaan järjestelmään.&lt;br /&gt;
&amp;lt;pre class=&#039;terminal&#039;&amp;gt;&lt;br /&gt;
jstest-gtk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Kalibroinnin tallentaminen järjestelmään==&lt;br /&gt;
&amp;lt;pre class=&#039;terminal&#039;&amp;gt;&lt;br /&gt;
sudo jscal-store /dev/input/js0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen (ilmeisesti kaikille käyttäjille) asetukset menevät talteen kansioon...&lt;br /&gt;
&amp;lt;pre class=&#039;terminal&#039;&amp;gt;&lt;br /&gt;
cat /var/lib/joystick/joystick.state&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
tiedostossa lienee riittävät tiedot &#039;&#039;&#039;udev-rules&#039;&#039;&#039;:n määrittelemiseen.&lt;br /&gt;
&lt;br /&gt;
==Pelikohtainen asetusten tallentaminen==&lt;br /&gt;
Kun olet kalibroinnut peliäsi varten &#039;&#039;&#039;jstest-gtk&#039;&#039;&#039;:lla, tallenna pelinkäynnistysscriptiin kyseisen ohjaimen asetukset.&lt;br /&gt;
&amp;lt;pre class=&#039;terminal&#039;&amp;gt;&lt;br /&gt;
jscal -p /dev/input/js0 &amp;gt;startmygame.sh&lt;br /&gt;
echo &amp;quot;supertuxkart&amp;quot; &amp;gt;&amp;gt; startmygame.sh&lt;br /&gt;
chmod 755 startmygame.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen voitkin käynnistää pelin.&lt;br /&gt;
&amp;lt;pre class=&#039;terminal&#039;&amp;gt;&lt;br /&gt;
./startmygame.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Hiiri]]&lt;br /&gt;
*[[Näppäimistö]]&lt;br /&gt;
*[[Peliohjaimet]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Ohjeet]]&lt;br /&gt;
[[Luokka:Laitteisto]]&lt;br /&gt;
[[Luokka:Pelit|*]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Portaali:Laitteisto&amp;diff=54082</id>
		<title>Portaali:Laitteisto</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Portaali:Laitteisto&amp;diff=54082"/>
		<updated>2021-10-23T16:32:11Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Artikkeleita */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kuva:IMG 1345.JPG|300px|right|thumb| Laitteilla on väliä. Jotkut toimivat, jotkut eivät.]]&lt;br /&gt;
Laitteiden toiminnassa Linuxissa on suuria eroja: monet laitteet toimivat suoraan vain kytkemällä laite koneeseen, mutta joskus joudutaan asentamaan laiteajureita tai tekemään muuta säätöä. Lisäksi on olemassa laitteita, jotka eivät toimi lainkaan Linuxissa, usein siksi, että laitevalmistajat eivät halua tehdä yhteistyötä kehittäjien kanssa.&lt;br /&gt;
&lt;br /&gt;
Laitteistoon liittyvää tietoa löytyy seuraavista paikoista&lt;br /&gt;
&lt;br /&gt;
== Artikkeleita ==&lt;br /&gt;
* [[Bluetooth]]&lt;br /&gt;
*[[Digiboksit]]&lt;br /&gt;
*[[Digitaalikamera]]&lt;br /&gt;
*[[digi-tv|Digitaalinen televisio]]&lt;br /&gt;
*[[HST|Henkilökortti]]&lt;br /&gt;
*[[Hiiri]]&lt;br /&gt;
*[[Kannettavat]]&lt;br /&gt;
*[[Kaukosäätimet]]&lt;br /&gt;
*[[Laskimet]]&lt;br /&gt;
*[[Miniläppäri]]t&lt;br /&gt;
*[[Modeemi]]&lt;br /&gt;
*[[Monen näytön järjestelmät]]&lt;br /&gt;
*[[Mp3-soitin]]&lt;br /&gt;
*[[Näppäimistö]]&lt;br /&gt;
*[[Näytönohjaimet]]&lt;br /&gt;
*[[PC speaker]]&lt;br /&gt;
*[[Peliohjaimet]]&lt;br /&gt;
*[[Skannerit]]&lt;br /&gt;
*[[Suositeltavat laitteistoratkaisut]]&lt;br /&gt;
*[[Tulostimet]]&lt;br /&gt;
*[[USB-muisti]]&lt;br /&gt;
*[[Verkkolaitteen valinta]]&lt;br /&gt;
*[[Verkkoliitynnät]]&lt;br /&gt;
* [[Viivakoodinlukijat]]&lt;br /&gt;
*[[Virrankulutuksen optimointi]]&lt;br /&gt;
*[[Verkkokamera]]&lt;br /&gt;
*[[WLAN]]&lt;br /&gt;
&lt;br /&gt;
== Luokkia ==&lt;br /&gt;
*Tietoa eri laitteiden käyttöönotosta ja hallinnasta: [[:Luokka:Laitteisto|Laitteisto]]&lt;br /&gt;
*Asennusraportteja: [[:Luokka:Asennukset|Asennukset]]&lt;br /&gt;
*WLAN-laitteisiin liittyviä artikkeleita: [[:Luokka:WLAN|WLAN]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Portaalit]]&lt;br /&gt;
[[Luokka:Laitteisto|*]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Peliohjaimet&amp;diff=54081</id>
		<title>Peliohjaimet</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Peliohjaimet&amp;diff=54081"/>
		<updated>2021-10-23T16:28:45Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kuva:Ilotikku.png|right|200px]]&lt;br /&gt;
Monet [[USB]]-väylään kytkettävät peliohjaimet (erityisesti pad-ohjaimet) toimivat suoraan Linuxissa. Monissa peleissä voi myös suoraan käyttää pad-ohjaimia, ratteja ja lentotikkuja. [[Wine]]n kautta ajettavissa peleissä peliohjaimet eivät yleensä toimi suoraan. Yleisimmät Xboxin, Logitechin, Thrustmasterin ja Sony PlayStationin peliohjaimet ovat hyvin tuettuja esimerkiksi [[Steam]]in kautta jaetuissa peleissä. Joissain tapauksissa voit joutua asentamaan ajurin järjestelmääsi, mikäli jakelu ei ole [[Ubuntu]].&lt;br /&gt;
&lt;br /&gt;
Näitä ajureita ovat mm.&lt;br /&gt;
* xboxdrv (Xbox 360, PS3)&lt;br /&gt;
* joystick ja jscalibrator (Logitech Rumblepad 2)&lt;br /&gt;
* [https://steamcommunity.com/sharedfiles/filedetails/?id=142372419 How to get Logitech steering wheels working properly on Ubuntu]&lt;br /&gt;
 &lt;br /&gt;
[[Frets on Fire]] -pelissä käytettävä Guitar Hero -kitara tarvitsee PS2/USB-adapterin. &lt;br /&gt;
&lt;br /&gt;
Ensimmäisen järjestelmään liitetyn peliohjaimen [[laitetiedosto]] on yleensä &amp;lt;tt&amp;gt;/dev/input/js0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Hiiri]]&lt;br /&gt;
*[[Näppäimistö]]&lt;br /&gt;
&lt;br /&gt;
==Aiheesta muualla==&lt;br /&gt;
* [http://www.makeuseof.com/tag/get-game-controllers-running-linux/ How to Get Game Controllers Running on Linux]&lt;br /&gt;
* [https://support.feralinteractive.com/en/guides/linux_gamepad/ How to set up a game controller in Linux]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Pelit]]&lt;br /&gt;
[[Luokka:Laitteisto]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Verkkoliitynn%C3%A4t&amp;diff=42218</id>
		<title>Verkkoliitynnät</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Verkkoliitynn%C3%A4t&amp;diff=42218"/>
		<updated>2015-03-25T18:36:21Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Katso myös */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Miten Linux verkkoon?==&lt;br /&gt;
&lt;br /&gt;
Toimivia verkkoliitäntätapoja ovat mm:&lt;br /&gt;
&lt;br /&gt;
* [[wikipedia:fi:ADSL|ADSL]] (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* [[Bluetooth]] ([[Matkapuhelin modeemina]])&lt;br /&gt;
* Ethernet/LAN (yhdistää lähiverkkoja toisiinsa käyttäen liittimenä yleensä RJ-45:sta; vakiona uusissa koneissa)&lt;br /&gt;
* GPRS/EDGE/UMTS (toimii yleensä, riippuen päätelaitteesta)&lt;br /&gt;
**[[Matkapuhelin modeemina]]&lt;br /&gt;
**[[Option GlobeTrotter]]&lt;br /&gt;
**[[Huawei E220/E270]]&lt;br /&gt;
* [[HomePNA]] (pcnet32-piirisarjan kortilla)&lt;br /&gt;
* [[wikipedia:fi:Kaapelimodeemi|Kaapelimodeemi]] (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* Kuitu (joko omalla liitäntäkortilla tai yleisemmin reitittimen välityksellä, jolloin kone yhdistetään rj45-ethernetillä; sisäverkkona vain erikoistapauksissa)&lt;br /&gt;
* [[Modeemi]] (perinteinen liitäntätapa puhelinverkon kautta, 33-56 Kbps, osa modeemeista ei toimi)&lt;br /&gt;
* Pakettiradio (antiikkinen)&lt;br /&gt;
* Rinnakkaiskaapeli (lähinnä oheislaitteita tai yksittäinen tietokone toiseen)&lt;br /&gt;
* Sarjakaapeli (vanha liitäntätapa, jota käytetään lähinnä yhdistämään lisälaitteita, tai kaksi tietokonetta suoraan toisiinsa)&lt;br /&gt;
* WiMax (ulkoisella ethernet-päätelaitteella)&lt;br /&gt;
* [[WLAN]] (Tarkista, että wlan-korttisi tukee vaadittavaa salaustasoa)&lt;br /&gt;
* WLL (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* [[Samba]] (verkkoresurssien jakaminen Linuxin ja Windowsin välillä)&lt;br /&gt;
&lt;br /&gt;
Verkkoyhteyttä hankittaessa kannattaa miettiä kuinka paljon yhteyden ylläpitoon halutaan käyttää aikaa. Helpoin liittymätyyppi on täysin operaattorin ylläpitämä: tällöin kaikki verkon asetukset haetaan automaattisesti operaattorin dhcp-palvelimelta. [[PPPoE]]- tai vpn/pptp-yhteyksiä kannattaa välttää.&lt;br /&gt;
&lt;br /&gt;
Kiinteä tai harvoin vaihtuva ip-osoite on suuri etu, jos haluaa voida ottaa yhteyttä koneeseensa ulkomaailmalta. Jälkimmäisessä tapauksessa tarvitaan [[DynDNS]] tai vastaava ulkoinen palvelu. Oma julkinen sähköpostipalvelin edellyttää kunnolla toimiakseen kiinteän ip-osoitteen.&lt;br /&gt;
&lt;br /&gt;
Suurin osa palveluntarjoajista kieltää kuluttaja-asiakkailta omien palvelinten pidon. Palvelinten pienimuotoinen käyttö on joissakin liittymissä sallittu eikä tällaiseen käyttöön muutenkaan yleensä puututa, mutta vakioporttien käyttöä estetään vaihtelevin määrin palomuuriasetuksin.&lt;br /&gt;
&lt;br /&gt;
Mikäli verkkoyhteytesi ADSL ja yhteysmuotona on [[PPPoE]], kannattaa harkita ulkoista ADSL-päätelaitetta, jossa PPPoE on ohjelmoitavissa tähän ulkoiseen laitteeseen. Tällöin vältetään osa ongelmista. Toisaalta samalla suljetaan pois valtava määrä ongelmien diagnosointi- ja korjausmahdollisuuksia, joita olisi Linuxin kanssa. Laitteiden firmwaret ovat usein bugisia.&lt;br /&gt;
&lt;br /&gt;
==Perusasetukset==&lt;br /&gt;
&lt;br /&gt;
Asetusten säätämiseen vaaditaan pääkäyttäjän oikeuksia. Asetusten määrittelyyn on suositeltavaa käyttää levitysversion mukana tulleita työkaluja. (Esim. [[Fedora Core|Fedora Coressa]] ethernet-verkon asetukset voi tehdä ohjelmalla system-config-network) Ongelmatilanteissa asetukset voi määrittää myös käsin systeemikomennoilla. Yleensä levitysversioiden asennusohjelma osaa määritellä toimivat verkkoasetukset asennuksen yhteydessä, ja tällöin käyttäjän ei jälkeenpäin tarvitse määritellä asetuksia uudestaan.&lt;br /&gt;
&lt;br /&gt;
Tavallisesti kuluttajaliittymissä verkko-osoite määritellään &amp;quot;dynaamisesti&amp;quot; [[DHCP]]:n avulla, jolloin palveluntarjoajan palvelin automaattisesti kertoo kulloinkin käytettävän ip-osoitteen ja muut tarpeelliset asetukset. Tällöin peruskäyttöön riittää, että kone asetetaan käyttämään DHCP:tä, mikä onkin yleensä oletusasetus. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Staattisessa&amp;quot; määrityksessä koneella on muuttumaton käsin asetettava ip-osoite. Tällainen ominaisuus on erittäin harvinainen yksityisten Internet-liittymissä, mutta mikään ei estä sisäverkon ip-osoitteiden staattista määrittämistä. Asetusten tekemiseen voi käyttää [[Ifconfig]]ia.&lt;br /&gt;
&lt;br /&gt;
Päätelaitteessa (ADSL- tai kaapelimodeemi tms.) on usein DHCP- ja [[NAT]]-palvelin, mikä takoittaa että sisäverkossa näkyvät osoitteet eivät välttämättä ole samoja kuin Internetiin näkyvät osoitteet. Jos haluaa ottaa koneisiinsa yhteyttä ulkoverkosta päätelaite on asetettava [[silta]]avaan tilaan tai siihen on määriteltävä mikä sisäverkon kone huolehtii ulkoapäin tulevista yhteyksistä.&lt;br /&gt;
&lt;br /&gt;
===Ethernet===&lt;br /&gt;
&lt;br /&gt;
Käytettäessä kiinteää IP-osoitetta verkkoasetukset tehdään seuraavasti (&amp;lt;&amp;gt; -merkkien sisällä olevat arvot riippuvat halutuista yhteysasetuksista):&lt;br /&gt;
&lt;br /&gt;
 [[ifconfig]] eth0 &amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&lt;br /&gt;
 [[route]] add default gw &amp;lt;yhdyskäytävän_osoite&amp;gt; eth0&lt;br /&gt;
 [[echo]] &amp;quot;nameserver &amp;lt;ip-osoite&amp;gt;&amp;quot; &amp;gt; /etc/[[resolv.conf]]&lt;br /&gt;
&lt;br /&gt;
DNS-palvelimia (nimipalvelimia) voi yleensä määrittää korkeintaan kolme, antamalla echo-komento useampaan kertaan (jäljempänä &amp;gt;-merkki korvattava &amp;gt;&amp;gt;:lla, jotta rivit tulevat tiedoston jatkoksi eikä koko uudeksi sisällöksi). Palvelinten suosituimmuusjärjestys määräytyy sen mukaan, missä järjestyksessä ne on lueteltu resolv.confissa.&lt;br /&gt;
&lt;br /&gt;
Dynaamisesti (jos käytössä on dhcp) asetukset voidaan tehdä dhcp:llä:&lt;br /&gt;
 [[dhclient]] eth0 tai dhcpcd eth0&lt;br /&gt;
Jolloin asetukset haetaan automaattisesti. Yleensä tätä tapaa käytetään kotikäyttöön tarkoitetuissa kiinteissä Internet-yhteyksissä.&lt;br /&gt;
&lt;br /&gt;
===WLAN===&lt;br /&gt;
WLAN-verkkoon voidaan yhdistää [[iwconfig]]-työkalulla, joka löytyy yleensä &amp;lt;tt&amp;gt;wireless-tools&amp;lt;/tt&amp;gt;-paketista. Jos verkon asetukset saadaan dhcp:llä (mikä on yleinen tapa), yhdistäminen onnistuu yksinkertaisesti liittymällä ensin verkkoon jonka jälkeen haetaan asetukset tavalliseen tapaan dhcp:llä.&lt;br /&gt;
&lt;br /&gt;
Yhdistetään verkkoon, jonka nimi (&#039;&#039;essid&#039;&#039;) on &amp;lt;tt&amp;gt;kotiwlani&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;kotiwlani&amp;quot;&lt;br /&gt;
Komento vaatii pääkäyttäjän oikeudet. Tarvittaessa voidaan antaa myös verkon salasana:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;&amp;lt;wlan-verkkoalue&amp;gt;&amp;quot; key s:asciiz-salasana&lt;br /&gt;
Tässä &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; on käytettävä verkkolaite. Käytettävissä olevat langattomat verkkolaitteet näkee komennolla &amp;lt;tt&amp;gt;iwconfig&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kun verkkoon on liitytty, voidaan tarvittavat asetukset hakea normaalisti dhcp:llä:&lt;br /&gt;
 dhclient eth0&lt;br /&gt;
tai&lt;br /&gt;
 dhcpcd eth0&lt;br /&gt;
&lt;br /&gt;
Jos verkon asetukset on annettava käsin, ne annetaan samaan tapaan kuin langallisten verkkojen tapauksessa [[ifconfig]]illa: liitytään ensin langattomaan verkkoon &amp;lt;tt&amp;gt;kotiwlani&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;kotiwlani&amp;quot;&lt;br /&gt;
ja asetetaan käytettävä ip-osoite, oletusyhdyskäytävä ja nimipalvelin:&lt;br /&gt;
 ifconfig eth0 &amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&lt;br /&gt;
 route add default gw &amp;lt;yhdyskäytävän_osoite&amp;gt; eth0&lt;br /&gt;
 echo &amp;quot;nameserver &amp;lt;dns-osoite&amp;gt;&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Katso myös: [[WLAN]]&lt;br /&gt;
&lt;br /&gt;
==Jakelukohtaiset ohjeet==&lt;br /&gt;
===[[Gentoo]]===&lt;br /&gt;
Gentoossa verkkoasetukset tehdään tiedostoon &amp;lt;tt&amp;gt;/etc/conf.d/net&amp;lt;/tt&amp;gt;. Tiedostossa &amp;lt;tt&amp;gt;/etc/conf.d/net.example&amp;lt;/tt&amp;gt; on esimerkkejä asetuksista.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Asetusten haku dynaamisesti:&#039;&#039;&#039;&lt;br /&gt;
Lisää tiedostoon rivit tai muokkaa jo olevia seuraavalla tavalla&lt;br /&gt;
 config_eth0=( &amp;quot;dhcp&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Staattiset asetukset:&#039;&#039;&#039;&lt;br /&gt;
 config_eth0=( &amp;quot;&amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&amp;quot; )&lt;br /&gt;
 routes_eth0=( &amp;quot;default gw &amp;lt;yhdyskäytävän_osoite&amp;gt;&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
Samalla tavalla voi myös säätää eth1:n, eth2:n jne.&lt;br /&gt;
&lt;br /&gt;
Verkkoyhteys otetaan automaattisesti käyttöön käynnistyksen yhteydessä komennolla&lt;br /&gt;
 rc-update add net.eth0 default&lt;br /&gt;
&lt;br /&gt;
===[[Debian]]===&lt;br /&gt;
&lt;br /&gt;
Verkkoasetukset löytyvät tiedostosta &amp;lt;tt&amp;gt;/etc/network/interfaces&amp;lt;/tt&amp;gt;, jossa verkkoliityntä voi olla määriteltynä joko&lt;br /&gt;
kiinteästi:&lt;br /&gt;
&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.0.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        gateway 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
tai dhcp:llä:&lt;br /&gt;
&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
&lt;br /&gt;
Uudet asetukset voi ottaa saman tien käyttöön käynnistämällä koneen verkkopalvelut uudelleen &amp;lt;tt&amp;gt;/etc/init.d/networking restart&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Internet-yhteyden jako ==&lt;br /&gt;
Yhteyden jako tapahtuu [[NAT]]in avulla, ellei käytössä ole riittävästi julkisia IP-osoitteita. Useissa työpöytäkäyttöön suunnatuissa Linux-[[jakelut|jakeluissa]] on helppokäyttöiset asetusohjelmat Internet-yhteyden jakoa varten.&lt;br /&gt;
&lt;br /&gt;
Linux-koneen voi myös asettaa reitittimeksi ilman NAT-järjestelyä.&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Kahden oletusreitin käyttö]]&lt;br /&gt;
*[[Palomuurit]]&lt;br /&gt;
*[[Verkkoliitynnät monimutkaisemmin|Verkkoliitynnät ammattilaisten tarpeisiin]]&lt;br /&gt;
*[http://fi.wikibooks.org/wiki/Internet-yhteyden_jakaminen_Ubuntulla Internet-yhteyden jakaminen Ubuntulla]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Verkko]]&lt;br /&gt;
[[Luokka:Ohjeet]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Verkkoliitynn%C3%A4t&amp;diff=42217</id>
		<title>Verkkoliitynnät</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Verkkoliitynn%C3%A4t&amp;diff=42217"/>
		<updated>2015-03-25T18:35:33Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Katso myös */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Miten Linux verkkoon?==&lt;br /&gt;
&lt;br /&gt;
Toimivia verkkoliitäntätapoja ovat mm:&lt;br /&gt;
&lt;br /&gt;
* [[wikipedia:fi:ADSL|ADSL]] (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* [[Bluetooth]] ([[Matkapuhelin modeemina]])&lt;br /&gt;
* Ethernet/LAN (yhdistää lähiverkkoja toisiinsa käyttäen liittimenä yleensä RJ-45:sta; vakiona uusissa koneissa)&lt;br /&gt;
* GPRS/EDGE/UMTS (toimii yleensä, riippuen päätelaitteesta)&lt;br /&gt;
**[[Matkapuhelin modeemina]]&lt;br /&gt;
**[[Option GlobeTrotter]]&lt;br /&gt;
**[[Huawei E220/E270]]&lt;br /&gt;
* [[HomePNA]] (pcnet32-piirisarjan kortilla)&lt;br /&gt;
* [[wikipedia:fi:Kaapelimodeemi|Kaapelimodeemi]] (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* Kuitu (joko omalla liitäntäkortilla tai yleisemmin reitittimen välityksellä, jolloin kone yhdistetään rj45-ethernetillä; sisäverkkona vain erikoistapauksissa)&lt;br /&gt;
* [[Modeemi]] (perinteinen liitäntätapa puhelinverkon kautta, 33-56 Kbps, osa modeemeista ei toimi)&lt;br /&gt;
* Pakettiradio (antiikkinen)&lt;br /&gt;
* Rinnakkaiskaapeli (lähinnä oheislaitteita tai yksittäinen tietokone toiseen)&lt;br /&gt;
* Sarjakaapeli (vanha liitäntätapa, jota käytetään lähinnä yhdistämään lisälaitteita, tai kaksi tietokonetta suoraan toisiinsa)&lt;br /&gt;
* WiMax (ulkoisella ethernet-päätelaitteella)&lt;br /&gt;
* [[WLAN]] (Tarkista, että wlan-korttisi tukee vaadittavaa salaustasoa)&lt;br /&gt;
* WLL (ulkoisella ethernet-päätelaittella)&lt;br /&gt;
* [[Samba]] (verkkoresurssien jakaminen Linuxin ja Windowsin välillä)&lt;br /&gt;
&lt;br /&gt;
Verkkoyhteyttä hankittaessa kannattaa miettiä kuinka paljon yhteyden ylläpitoon halutaan käyttää aikaa. Helpoin liittymätyyppi on täysin operaattorin ylläpitämä: tällöin kaikki verkon asetukset haetaan automaattisesti operaattorin dhcp-palvelimelta. [[PPPoE]]- tai vpn/pptp-yhteyksiä kannattaa välttää.&lt;br /&gt;
&lt;br /&gt;
Kiinteä tai harvoin vaihtuva ip-osoite on suuri etu, jos haluaa voida ottaa yhteyttä koneeseensa ulkomaailmalta. Jälkimmäisessä tapauksessa tarvitaan [[DynDNS]] tai vastaava ulkoinen palvelu. Oma julkinen sähköpostipalvelin edellyttää kunnolla toimiakseen kiinteän ip-osoitteen.&lt;br /&gt;
&lt;br /&gt;
Suurin osa palveluntarjoajista kieltää kuluttaja-asiakkailta omien palvelinten pidon. Palvelinten pienimuotoinen käyttö on joissakin liittymissä sallittu eikä tällaiseen käyttöön muutenkaan yleensä puututa, mutta vakioporttien käyttöä estetään vaihtelevin määrin palomuuriasetuksin.&lt;br /&gt;
&lt;br /&gt;
Mikäli verkkoyhteytesi ADSL ja yhteysmuotona on [[PPPoE]], kannattaa harkita ulkoista ADSL-päätelaitetta, jossa PPPoE on ohjelmoitavissa tähän ulkoiseen laitteeseen. Tällöin vältetään osa ongelmista. Toisaalta samalla suljetaan pois valtava määrä ongelmien diagnosointi- ja korjausmahdollisuuksia, joita olisi Linuxin kanssa. Laitteiden firmwaret ovat usein bugisia.&lt;br /&gt;
&lt;br /&gt;
==Perusasetukset==&lt;br /&gt;
&lt;br /&gt;
Asetusten säätämiseen vaaditaan pääkäyttäjän oikeuksia. Asetusten määrittelyyn on suositeltavaa käyttää levitysversion mukana tulleita työkaluja. (Esim. [[Fedora Core|Fedora Coressa]] ethernet-verkon asetukset voi tehdä ohjelmalla system-config-network) Ongelmatilanteissa asetukset voi määrittää myös käsin systeemikomennoilla. Yleensä levitysversioiden asennusohjelma osaa määritellä toimivat verkkoasetukset asennuksen yhteydessä, ja tällöin käyttäjän ei jälkeenpäin tarvitse määritellä asetuksia uudestaan.&lt;br /&gt;
&lt;br /&gt;
Tavallisesti kuluttajaliittymissä verkko-osoite määritellään &amp;quot;dynaamisesti&amp;quot; [[DHCP]]:n avulla, jolloin palveluntarjoajan palvelin automaattisesti kertoo kulloinkin käytettävän ip-osoitteen ja muut tarpeelliset asetukset. Tällöin peruskäyttöön riittää, että kone asetetaan käyttämään DHCP:tä, mikä onkin yleensä oletusasetus. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Staattisessa&amp;quot; määrityksessä koneella on muuttumaton käsin asetettava ip-osoite. Tällainen ominaisuus on erittäin harvinainen yksityisten Internet-liittymissä, mutta mikään ei estä sisäverkon ip-osoitteiden staattista määrittämistä. Asetusten tekemiseen voi käyttää [[Ifconfig]]ia.&lt;br /&gt;
&lt;br /&gt;
Päätelaitteessa (ADSL- tai kaapelimodeemi tms.) on usein DHCP- ja [[NAT]]-palvelin, mikä takoittaa että sisäverkossa näkyvät osoitteet eivät välttämättä ole samoja kuin Internetiin näkyvät osoitteet. Jos haluaa ottaa koneisiinsa yhteyttä ulkoverkosta päätelaite on asetettava [[silta]]avaan tilaan tai siihen on määriteltävä mikä sisäverkon kone huolehtii ulkoapäin tulevista yhteyksistä.&lt;br /&gt;
&lt;br /&gt;
===Ethernet===&lt;br /&gt;
&lt;br /&gt;
Käytettäessä kiinteää IP-osoitetta verkkoasetukset tehdään seuraavasti (&amp;lt;&amp;gt; -merkkien sisällä olevat arvot riippuvat halutuista yhteysasetuksista):&lt;br /&gt;
&lt;br /&gt;
 [[ifconfig]] eth0 &amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&lt;br /&gt;
 [[route]] add default gw &amp;lt;yhdyskäytävän_osoite&amp;gt; eth0&lt;br /&gt;
 [[echo]] &amp;quot;nameserver &amp;lt;ip-osoite&amp;gt;&amp;quot; &amp;gt; /etc/[[resolv.conf]]&lt;br /&gt;
&lt;br /&gt;
DNS-palvelimia (nimipalvelimia) voi yleensä määrittää korkeintaan kolme, antamalla echo-komento useampaan kertaan (jäljempänä &amp;gt;-merkki korvattava &amp;gt;&amp;gt;:lla, jotta rivit tulevat tiedoston jatkoksi eikä koko uudeksi sisällöksi). Palvelinten suosituimmuusjärjestys määräytyy sen mukaan, missä järjestyksessä ne on lueteltu resolv.confissa.&lt;br /&gt;
&lt;br /&gt;
Dynaamisesti (jos käytössä on dhcp) asetukset voidaan tehdä dhcp:llä:&lt;br /&gt;
 [[dhclient]] eth0 tai dhcpcd eth0&lt;br /&gt;
Jolloin asetukset haetaan automaattisesti. Yleensä tätä tapaa käytetään kotikäyttöön tarkoitetuissa kiinteissä Internet-yhteyksissä.&lt;br /&gt;
&lt;br /&gt;
===WLAN===&lt;br /&gt;
WLAN-verkkoon voidaan yhdistää [[iwconfig]]-työkalulla, joka löytyy yleensä &amp;lt;tt&amp;gt;wireless-tools&amp;lt;/tt&amp;gt;-paketista. Jos verkon asetukset saadaan dhcp:llä (mikä on yleinen tapa), yhdistäminen onnistuu yksinkertaisesti liittymällä ensin verkkoon jonka jälkeen haetaan asetukset tavalliseen tapaan dhcp:llä.&lt;br /&gt;
&lt;br /&gt;
Yhdistetään verkkoon, jonka nimi (&#039;&#039;essid&#039;&#039;) on &amp;lt;tt&amp;gt;kotiwlani&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;kotiwlani&amp;quot;&lt;br /&gt;
Komento vaatii pääkäyttäjän oikeudet. Tarvittaessa voidaan antaa myös verkon salasana:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;&amp;lt;wlan-verkkoalue&amp;gt;&amp;quot; key s:asciiz-salasana&lt;br /&gt;
Tässä &amp;lt;tt&amp;gt;eth0&amp;lt;/tt&amp;gt; on käytettävä verkkolaite. Käytettävissä olevat langattomat verkkolaitteet näkee komennolla &amp;lt;tt&amp;gt;iwconfig&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Kun verkkoon on liitytty, voidaan tarvittavat asetukset hakea normaalisti dhcp:llä:&lt;br /&gt;
 dhclient eth0&lt;br /&gt;
tai&lt;br /&gt;
 dhcpcd eth0&lt;br /&gt;
&lt;br /&gt;
Jos verkon asetukset on annettava käsin, ne annetaan samaan tapaan kuin langallisten verkkojen tapauksessa [[ifconfig]]illa: liitytään ensin langattomaan verkkoon &amp;lt;tt&amp;gt;kotiwlani&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 iwconfig eth0 essid &amp;quot;kotiwlani&amp;quot;&lt;br /&gt;
ja asetetaan käytettävä ip-osoite, oletusyhdyskäytävä ja nimipalvelin:&lt;br /&gt;
 ifconfig eth0 &amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&lt;br /&gt;
 route add default gw &amp;lt;yhdyskäytävän_osoite&amp;gt; eth0&lt;br /&gt;
 echo &amp;quot;nameserver &amp;lt;dns-osoite&amp;gt;&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Katso myös: [[WLAN]]&lt;br /&gt;
&lt;br /&gt;
==Jakelukohtaiset ohjeet==&lt;br /&gt;
===[[Gentoo]]===&lt;br /&gt;
Gentoossa verkkoasetukset tehdään tiedostoon &amp;lt;tt&amp;gt;/etc/conf.d/net&amp;lt;/tt&amp;gt;. Tiedostossa &amp;lt;tt&amp;gt;/etc/conf.d/net.example&amp;lt;/tt&amp;gt; on esimerkkejä asetuksista.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Asetusten haku dynaamisesti:&#039;&#039;&#039;&lt;br /&gt;
Lisää tiedostoon rivit tai muokkaa jo olevia seuraavalla tavalla&lt;br /&gt;
 config_eth0=( &amp;quot;dhcp&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Staattiset asetukset:&#039;&#039;&#039;&lt;br /&gt;
 config_eth0=( &amp;quot;&amp;lt;ip-osoite&amp;gt; netmask &amp;lt;verkkomaski&amp;gt;&amp;quot; )&lt;br /&gt;
 routes_eth0=( &amp;quot;default gw &amp;lt;yhdyskäytävän_osoite&amp;gt;&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
Samalla tavalla voi myös säätää eth1:n, eth2:n jne.&lt;br /&gt;
&lt;br /&gt;
Verkkoyhteys otetaan automaattisesti käyttöön käynnistyksen yhteydessä komennolla&lt;br /&gt;
 rc-update add net.eth0 default&lt;br /&gt;
&lt;br /&gt;
===[[Debian]]===&lt;br /&gt;
&lt;br /&gt;
Verkkoasetukset löytyvät tiedostosta &amp;lt;tt&amp;gt;/etc/network/interfaces&amp;lt;/tt&amp;gt;, jossa verkkoliityntä voi olla määriteltynä joko&lt;br /&gt;
kiinteästi:&lt;br /&gt;
&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
        address 192.168.0.2&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        gateway 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
tai dhcp:llä:&lt;br /&gt;
&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
&lt;br /&gt;
Uudet asetukset voi ottaa saman tien käyttöön käynnistämällä koneen verkkopalvelut uudelleen &amp;lt;tt&amp;gt;/etc/init.d/networking restart&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Internet-yhteyden jako ==&lt;br /&gt;
Yhteyden jako tapahtuu [[NAT]]in avulla, ellei käytössä ole riittävästi julkisia IP-osoitteita. Useissa työpöytäkäyttöön suunnatuissa Linux-[[jakelut|jakeluissa]] on helppokäyttöiset asetusohjelmat Internet-yhteyden jakoa varten.&lt;br /&gt;
&lt;br /&gt;
Linux-koneen voi myös asettaa reitittimeksi ilman NAT-järjestelyä.&lt;br /&gt;
&lt;br /&gt;
==Katso myös==&lt;br /&gt;
*[[Kahden oletusreitin käyttö]]&lt;br /&gt;
*[[Palomuurit]]&lt;br /&gt;
*[[Verkkoliitynnät monimutkaisemmin|Verkkoliitynnät ammattilaisten tarpeisiin]]&lt;br /&gt;
*[[http://fi.wikibooks.org/wiki/Internet-yhteyden_jakaminen_Ubuntulla Internet-yhteyden jakaminen Ubuntulla]] &lt;br /&gt;
&lt;br /&gt;
[[Luokka:Verkko]]&lt;br /&gt;
[[Luokka:Ohjeet]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=DHCP&amp;diff=42216</id>
		<title>DHCP</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=DHCP&amp;diff=42216"/>
		<updated>2015-03-25T18:28:28Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Aiheesta muualla */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DHCP eli Dynamic Host Configuration Protocol on protokolla, jonka avulla tietokoneille voidaan mm. määrittää IP-osoite automaattisesti. Jos haluat määrittää verkkokortille eth0 asetukset dhcp:llä, komenna&lt;br /&gt;
 dhclient eth0&lt;br /&gt;
Joissain [[Jakelut|jakeluissa]] käytetään komentoa &amp;lt;tt&amp;gt;dhcpcd&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jos haluat automatisoida tämän, laita tiedostoon /etc/network/interfaces (Debianissa) rivi&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
Huomaa että tuolla kullekin verkkokortille saa olla vain yksi iface-alkuinen rivi. &lt;br /&gt;
&lt;br /&gt;
== DHCP yleisesti ==&lt;br /&gt;
&lt;br /&gt;
DHCP eli &#039;&#039;Dynamic Host Configuration Protocol&#039;&#039; on protokolla jonka avulla voidaan jakaa automaattisesti IP-osoitteet verkossa toimiville verkkolaitteille. IP-osoitteen lisäksi DHCP:lla annetaan yleensä muitakin verkkoa koskevia asetuksia, mm. &#039;&#039;aliverkon peite&#039;&#039;, &#039;&#039;oletusreititin&#039;&#039; (&#039;&#039;gateway&#039;&#039;) ja &#039;&#039;DNS&#039;&#039;- eli &#039;&#039;nimipalvelimet&#039;&#039;. Tällöin verkon ylläpitäjän ei tarvitse asettaa verkkoasetuksia jokaisella työasemalla. &lt;br /&gt;
&lt;br /&gt;
DHCP hyväksyttiin Internet-standardiksi vuonna 1993, ja se suunniteltiin vanhemman BOOTP-protokollan (&#039;&#039;boot&#039;&#039;strap &#039;&#039;p&#039;&#039;rotocol) seuraajaksi protokollan monien puutteiden vuoksi. BOOTP ei salli IP-osoitteiden jakamista määräajaksi, eikä tue lisäoptioiden määrittämistä. DHCP on taaksepäin yhteensopiva BOOTP:n kanssa.&lt;br /&gt;
&lt;br /&gt;
Suuressa osassa kuluttajille suunnatuista Internet-liittymistä käytetään DHCP:tä osoitemäärittelyihin juuri sen helppouden vuoksi. &#039;&#039;ADSL-&#039;&#039; tai &#039;&#039;WLAN-reitittimet&#039;&#039; toimivat yleensä myös DHCP-palvelimina mikäli internet-yhteys halutaan jakaa usealle koneelle sisäverkossa &#039;&#039;NAT&#039;&#039;in läpi.&lt;br /&gt;
&lt;br /&gt;
== DHCPD ==&lt;br /&gt;
&lt;br /&gt;
DHCPD on palvelu, joka mahdollistaa tietokoneen toimimisen DHCP-palvelimena. Linuxissa yleisimmin käytetty DHCP-toteutus on Internet Systems Consortiumin kehittämä. DHCPD:n kanssa voi helposti sotkea suurenkin verkon toiminnan, mikäli laittaa palvelimen kuuntelemaan väärään verkkoliityntään ja jos verkon palomuureja ei ole säädetty huolella. &lt;br /&gt;
&lt;br /&gt;
DHCPD jakaa IP-osoitteista sille määritellyistä osoitealueista. Eri laitteet tunnistetaan yleensä niiden fyysisten eli MAC-osoitteiden perusteella (protokolla sallii myös muunlaiset tunnisteet). Sitä, että jokin IP-osoite on annettu palvelimelta koneen käytöön, kutsutaan &#039;&#039;lease&#039;&#039;ksi (&#039;&#039;vuokra&#039;&#039;). Kullekin leaselle on määritelty maksimiaika, jonka se voi olla voimassa. Palvelu varmistaa ennen osoitteen antamista, että se on vapaana eli ei löydy lease-tiedostosta tai vastaa ICMP ECHOon (eli pingiin). Asiakas uusii leasen ennen sen vanhenemista mikäli haluaa jatkaa verkko-osoitteen käyttöä.&lt;br /&gt;
&lt;br /&gt;
Verkko-osoitteita voidaan jakaa joko dynaamisesti tietyltä alueelta (esim 192.168.0.10-192.68.0.100) mille tahansa laitteille tai sitten kiinteästi, niin että tietylle MAC-osoitteelle annetaan aina ennalta määrätty verkko-osoite. Kiinteällä osoitteistuksella saadaan esimerkiksi tulostimille tai palvelimille aina samat osoitteet, mikä on usein välttämätöntä käytettävyyden kannalta ja helpottaa myös pääsynvalvontaa. Dynaaminen osoitteistus sen sijaan sopii esim silloin, kun verkossa on muuttuva määrä laitteita (esim. avoin vierailijaverkko). Tällöin lease-ajatkin kannattaa asettaa lyhyeksi.&lt;br /&gt;
&lt;br /&gt;
Yleisimmissä skenaarioissa yhdelle verkkoalueelle riittää yksi DHCP-palvelin, mutta se on samalla myös yksittäinen vikaantumispiste (&#039;&#039;single point of failure&#039;&#039;). ISC:n dhcpd tukee versiosta 3.0 lähtien DHCP failoveria. Tällöin vikaantumispisteestä päästään eroon määrittelemällä &#039;&#039;failover peer&#039;&#039;ejä (dhcp-palvelimia joilla on samat poolit ja ranget jne), ja pääpalvelimen vikaantuessa alkaa &amp;quot;varapalvelin&amp;quot; jakaa osoitteita.&lt;br /&gt;
&lt;br /&gt;
Dhcpd:n käyttämät tiedostot ovat &#039;&#039;dhcpd.conf&#039;&#039;, &#039;&#039;dhcpd.leases(~)&#039;&#039; ja &#039;&#039;dhcpd.pid&#039;&#039; joista .conf sisältää käyttäjän tekemät määrittelyt. Palvelu tallettaa leaset ja niiden kestoajat &#039;&#039;dhcpd.leases(~)&#039;&#039;-tiedostoon. Myös komentoriviltä voidaan antaa parametrejä. Ajettavan binäärin nimi on &#039;&#039;&#039;dhcpd&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Komentorivioptiot ==&lt;br /&gt;
Kuunneltavat interfacet voi asettaa komentoriviltä kirjoittamalla niiden nimet komennon perään (esim: &#039;&#039;&#039;dhcpd&#039;&#039;&#039; &#039;&#039;eth0&#039;&#039;). Mikäli interfaceja ei ole listattu, kuunnellaan kaikkia broadcastiin kykeneviä liityntöjä. DHCP-palvelimen standardin mukainen portti on &#039;&#039;&#039;67&#039;&#039;&#039;, mutta senkin voi halutessaan vaihtaa &#039;&#039;&#039;-p&#039;&#039;&#039; &#039;&#039;port&#039;&#039;:llä. Komentoriviltä voi myös määrittää manuaalisesti asetustiedoston sijainnin (&#039;&#039;&#039;-cf&#039;&#039;&#039; &#039;&#039;config-file&#039;&#039;), leasetiedoston (&#039;&#039;&#039;-lf&#039;&#039;&#039; &#039;&#039;lease-file&#039;&#039;) ja dhcpd-prosessin ID:n sisältävän tiedoston (&#039;&#039;&#039;-pf&#039;&#039;&#039; &#039;&#039;pid-file&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
== dhcpd.conf ==&lt;br /&gt;
Daemonin asetustiedostoa voi muokata omien tarpeiden mukaan hyvin monipuolisesti. Tiedosto on vapaamuotoinen ASCII-tekstitiedosto, joka jäsennetään erikseen sitä luettaessa. &lt;br /&gt;
&lt;br /&gt;
esimerkki alueen määrityksestä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 subnet 192.168.0.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.0.56 192.168.0.100;&lt;br /&gt;
   option domain-name-servers 123.123.4.30, 123.123.5.30;&lt;br /&gt;
   option subnet-mask 255.255.255.0;&lt;br /&gt;
   option routers 192.168.0.1;&lt;br /&gt;
   option broadcast-address 192.168.0.255;&lt;br /&gt;
   option netbios-name-servers 192.168.0.1;&lt;br /&gt;
   default-lease-time 600 max-lease-time 7200;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
esimerkki yhden isännän määrityksestä:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 host kone {&lt;br /&gt;
        hardware ethernet 00:0D:3A:63:EB:73;&lt;br /&gt;
        fixed-address 192.168.0.10;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DHCP-client ==&lt;br /&gt;
&lt;br /&gt;
DHCP-Asiakasohjelma mahdollistaa IP-osoitteen ja muiden tietojen automaattisen hakemisen. Se lähettää asiakasportista &#039;&#039;68&#039;&#039; verkon &#039;&#039;broadcast&#039;&#039;-osoitteeseen porttiin &#039;&#039;67&#039;&#039; pyynnön saada palvelimelta IP-osoite (&#039;&#039;DHCPDISCOVER&#039;&#039;). Mikäli palvelin tarjoaa laitteelle osoitetta, vastaa se &#039;&#039;DHCPOFFER&#039;&#039;:lla, minkä jälkeen client lähettää &#039;&#039;DHCPREQUEST&#039;&#039;:in (pyydetään osoitetta). Palvelin vastaa &#039;&#039;DHCPACK&#039;&#039;:illa, mikäli kaikki meni hyvin. Tämän jälkeen asiakaskone saa alkaa käyttää tarjottua IP-osoitetta. &lt;br /&gt;
&lt;br /&gt;
Tavallisesti osoite haetaan määritetyille verkkoliitynnöille tietokoneen käynnistyessä tai verkkoyhteyden kytkeytyessä. Vanhemmissa järjestelmissä &#039;&#039;&#039;dhclient&#039;&#039;&#039; saatetaan joutua ajamaan erikseen mutta uudemmissa järjestelmissä käynnistysskriptit lukevat esim /etc/network/interfaces:sta, mille liitynnöille client tulisi ajaa ja hoitavat osoitteen hakemisen. Vikatilanteissa, esimerkiksi jos nettiliittymässä oli ongelmaa konetta käynnistettäessä, dhclient tai sitä kutsuva [[GNU/Linuxin käynnistysprosessi#Pikkuisen init-skripteistä|init-skripti]] voidaan joutua ajamaan uudestaan käsin.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;dhclient.conf&#039;&#039; sisältää käyttäjän antamia asetuksia, esim. tiedon siitä mitä kaikkea lisätietokenttiä palvelimelta pyydetään (esim. netbios-palvelin). Asiakas pitää myös kirjaa siitä mitkä leaset se on saanut ja kuinka kauan ne ovat voimassa. Nämä löytyvät tiedostosta &#039;&#039;dhclient.&amp;lt;interface&amp;gt;.leases&#039;&#039; tai &#039;&#039;dhclient.leases&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aiheesta muualla ==&lt;br /&gt;
*[[wikipedia:fi:DHCP|DHCP Wikipediassa]]&lt;br /&gt;
*[http://www.madboa.com/geek/dhcp-failover/ Vikatilanteista selviäminen]&lt;br /&gt;
*[http://fi.wikibooks.org/wiki/Internet-yhteyden_jakaminen_Ubuntulla Internet-yhteyden jakaminen Ubuntulla]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Verkko]]&lt;br /&gt;
[[Luokka:Käsitteet]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Tulostimet&amp;diff=38380</id>
		<title>Tulostimet</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Tulostimet&amp;diff=38380"/>
		<updated>2013-10-16T11:31:50Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tietoa eri tulostimien toimivuudesta Linuxin kanssa.&lt;br /&gt;
&lt;br /&gt;
== Brother ==&lt;br /&gt;
&lt;br /&gt;
=== HL 5240 ===&lt;br /&gt;
Toimii, muttei kannata käyttää PostScript-ajuria, vaikka yleensä myös silläkin toimii. Käyttää tulostukseen BRScriptiä, joka on osittain yhteensopiva PostScriptin kanssa. Liitännät LPT ja USB.&lt;br /&gt;
&lt;br /&gt;
== Canon ==&lt;br /&gt;
&lt;br /&gt;
===pixma mp280===&lt;br /&gt;
Canonin pixma mp280 tulostinajuria ei löydy [[Ubuntu]] jakelun paketinhallinnasta, mutta sen voi asentaa [[Debian]] ja [[Fedora]] pohjaisiin jakeluihin Canonin [http://support-in.canon-asia.com/contents/IN/EN/0100301402.html kotisivuilta] löytyvällä asennuspaketilla. Kuvanlukijaa varten katso artikkeli [[Skannerin valinta#Canon pixma mp280]].&lt;br /&gt;
&lt;br /&gt;
Ajuripaketin asennus [[Ubuntu]] ja [[Debian]] pohjaiseen jakeluun. Hae Canonin [http://support-in.canon-asia.com/contents/IN/EN/0100301402.html kotisivuilta] &amp;lt;tt&amp;gt;cnijfilter-mp280series-3.40-1-deb.tar.gz&amp;lt;/tt&amp;gt; niminen paketti ja pura se seuraavilla komentorivi komennoilla.&lt;br /&gt;
 &lt;br /&gt;
 tar xvkf  cnijfilter-mp280series-3.40-1-deb.tar.gz&lt;br /&gt;
 cd cnijfilter-mp280series-3.40-1-deb&lt;br /&gt;
 [[sudo]] ./install.sh&lt;br /&gt;
&lt;br /&gt;
== Hewlett-Packard ==&lt;br /&gt;
&lt;br /&gt;
=== Laserjet III ===&lt;br /&gt;
&lt;br /&gt;
[[Tiedosto:LJIID-LaserJet.jpg|right|150px|thumb|LaserJet III, aikansa klassikko.]]&lt;br /&gt;
&#039;&#039;&#039;Laserjet 3&#039;&#039;&#039; on tulostimien Kuplavolkkari, klassikkolaite joka on aikanaan paljon myyty, mekaanisesti suhteellisen yksinkertainen, helposti korjattavissa ja sille oli varaosia helpsti saatavilla. Tulostimen paperirata on melko suora (hyvä asia) ja paksuilla materiaaleilla sen saa suoraksi takaluukun avaamalla. Laitteesta on yhden ja kahden tarjottimen versioita. Liitäntänä ainoastaan rinnakkaisliintäntä (ja rs-232?), verkkoliintäntä toteutettiin yleensä erillisellä, ulkoisella JetDirect-laitteella. Linuxin kanssa toimiva, joskin nykynormein hidas laite vieläkin jos sellaisen saa jostain käsiinsä.&lt;br /&gt;
&lt;br /&gt;
=== Laserjet 4100 ===&lt;br /&gt;
&lt;br /&gt;
[[Tiedosto:4100-LaserJet.jpg|right|150px|thumb|Laserjet 4100.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laserjet 4100TN&#039;&#039;&#039; Toimii ongelmitta [[CUPS]]:n kanssa verkkoliitännän kautta, näkyy [[IPP]]-protokollalla.&lt;br /&gt;
&lt;br /&gt;
=== PSC 2355===&lt;br /&gt;
HP PSC 2355 all-in-one saadaan toimimaan [http://linuxprinting.org Linuxprinting.orgin] [http://linuxprinting.org/show_driver.cgi?driver=lbp660&amp;amp;fromprinter=Canon-LBP-660 ohjeella] helposti.&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
Ohjeessa varoitetaan asentamasta ajureita suoraan Samsungin sivuilta.&lt;br /&gt;
*[http://ubuntuforums.org/showthread.php?t=341621 Guide to installing Samsung printers &amp;amp; the Unified Linux Driver]&lt;br /&gt;
*[http://www.bchemnet.com/suldr/index.html The Samsung Unified Linux Driver Repository]&lt;br /&gt;
&lt;br /&gt;
== Katso myös ==&lt;br /&gt;
* [[Tulostusjono]]&lt;br /&gt;
*[[Turboprint]]&lt;br /&gt;
*[[Tulostaminen CD-levyn pinnalle]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Laitteisto]]&lt;br /&gt;
[[Luokka:Ajurit]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Tulostimet&amp;diff=38379</id>
		<title>Tulostimet</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Tulostimet&amp;diff=38379"/>
		<updated>2013-10-16T11:29:10Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tietoa eri tulostimien toimivuudesta Linuxin kanssa.&lt;br /&gt;
&lt;br /&gt;
== Canon ==&lt;br /&gt;
&lt;br /&gt;
===pixma mp280===&lt;br /&gt;
Canonin pixma mp280 tulostinajuria ei löydy [[Ubuntu]] jakelun paketinhallinnasta, mutta sen voi asentaa [[Debian]] ja [[Fedora]] pohjaisiin jakeluihin Canonin [http://support-in.canon-asia.com/contents/IN/EN/0100301402.html kotisivuilta] löytyvällä asennuspaketilla. Kuvanlukijaa varten katso artikkeli [[Skannerin valinta#Canon pixma mp280]].&lt;br /&gt;
&lt;br /&gt;
Ajuripaketin asennus [[Ubuntu]] ja [[Debian]] pohjaiseen jakeluun. Hae Canonin [http://support-in.canon-asia.com/contents/IN/EN/0100301402.html kotisivuilta] &amp;lt;tt&amp;gt;cnijfilter-mp280series-3.40-1-deb.tar.gz&amp;lt;/tt&amp;gt; niminen paketti ja pura se seuraavilla komentorivi komennoilla.&lt;br /&gt;
 &lt;br /&gt;
 tar xvkf  cnijfilter-mp280series-3.40-1-deb.tar.gz&lt;br /&gt;
 cd cnijfilter-mp280series-3.40-1-deb&lt;br /&gt;
 [[sudo]] ./install.sh&lt;br /&gt;
&lt;br /&gt;
== Hewlett-Packard ==&lt;br /&gt;
&lt;br /&gt;
=== Laserjet III ===&lt;br /&gt;
&lt;br /&gt;
[[Tiedosto:LJIID-LaserJet.jpg|right|150px|thumb|LaserJet III, aikansa klassikko.]]&lt;br /&gt;
&#039;&#039;&#039;Laserjet 3&#039;&#039;&#039; on tulostimien Kuplavolkkari, klassikkolaite joka on aikanaan paljon myyty, mekaanisesti suhteellisen yksinkertainen, helposti korjattavissa ja sille oli varaosia helpsti saatavilla. Tulostimen paperirata on melko suora (hyvä asia) ja paksuilla materiaaleilla sen saa suoraksi takaluukun avaamalla. Laitteesta on yhden ja kahden tarjottimen versioita. Liitäntänä ainoastaan rinnakkaisliintäntä (ja rs-232?), verkkoliintäntä toteutettiin yleensä erillisellä, ulkoisella JetDirect-laitteella. Linuxin kanssa toimiva, joskin nykynormein hidas laite vieläkin jos sellaisen saa jostain käsiinsä.&lt;br /&gt;
&lt;br /&gt;
=== Laserjet 4100 ===&lt;br /&gt;
&lt;br /&gt;
[[Tiedosto:4100-LaserJet.jpg|right|150px|thumb|Laserjet 4100.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Laserjet 4100TN&#039;&#039;&#039; Toimii ongelmitta [[CUPS]]:n kanssa verkkoliitännän kautta, näkyy [[IPP]]-protokollalla.&lt;br /&gt;
&lt;br /&gt;
=== PSC 2355===&lt;br /&gt;
HP PSC 2355 all-in-one saadaan toimimaan [http://linuxprinting.org Linuxprinting.orgin] [http://linuxprinting.org/show_driver.cgi?driver=lbp660&amp;amp;fromprinter=Canon-LBP-660 ohjeella] helposti.&lt;br /&gt;
&lt;br /&gt;
==Samsung==&lt;br /&gt;
Ohjeessa varoitetaan asentamasta ajureita suoraan Samsungin sivuilta.&lt;br /&gt;
*[http://ubuntuforums.org/showthread.php?t=341621 Guide to installing Samsung printers &amp;amp; the Unified Linux Driver]&lt;br /&gt;
*[http://www.bchemnet.com/suldr/index.html The Samsung Unified Linux Driver Repository]&lt;br /&gt;
&lt;br /&gt;
== Brother ==&lt;br /&gt;
&lt;br /&gt;
=== HL 5240 ===&lt;br /&gt;
Toimii, muttei kannata käyttää PostScript-ajuria, vaikka yleensä myös silläkin toimii. Käyttää tulostukseen BRScriptiä, joka on osittain yhteensopiva PostScriptin kanssa. Liitännät LPT ja USB.&lt;br /&gt;
&lt;br /&gt;
== Katso myös ==&lt;br /&gt;
* [[Tulostusjono]]&lt;br /&gt;
*[[Turboprint]]&lt;br /&gt;
*[[Tulostaminen CD-levyn pinnalle]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Laitteisto]]&lt;br /&gt;
[[Luokka:Ajurit]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=22387</id>
		<title>Linux.fi:Kahvihuone</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=22387"/>
		<updated>2008-08-17T00:37:09Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Virallinen suhde [http://lokalisointi.org kotoistamiseen]? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{kevytsuojattu}}&lt;br /&gt;
&#039;&#039;&#039;HUOM!&#039;&#039;&#039; Lisääthän uudet keskusteluaiheet kahvihuoneen alkuun, niin sivu pysyy selkeämpänä. Hyvän tavan mukaista on myös käyttää &amp;lt;nowiki&amp;gt;--~~~~~&amp;lt;/nowiki&amp;gt; -merkintää viestien lopussa, jotta kirjoittaja ja kirjoitusaika jäisivät selvemmin esille. &lt;br /&gt;
&lt;br /&gt;
Vanhat keskustelut on arkistoitu sivulle [[Arkisto:Kahvihuone]].&lt;br /&gt;
&lt;br /&gt;
==Muutosten tarkastaminen==&lt;br /&gt;
Otetaanko ylläpidossa käyttöön tuo muutosten tarkastaminen? Eli kun vilkaisee jotain rekisteröimättömän käyttäjän tekemää muutosta, pitäisi painaa &amp;quot;merkitse tarkastetuksi&amp;quot; -linkkiä, niin huutomerkit häviäivät muutosten listalta. Tällä saataisiin pienten muutosten seuraaminen helpommaksi kun ei kaikkien tarvitsisi vilkaista. --[[Käyttäjä:Maakuth|Maakuth]] 28. kesäkuuta 2008 kello 14.20 (EEST)&lt;br /&gt;
:Eipä tuon ominaisuuden hyötykäytöstä mitään haittaakaan ole, eli aletaan vaan klikkailemaan tuota linkkiä. --[[Käyttäjä:Heikki|Heikki]] 28. kesäkuuta 2008 kello 22.35 (EEST)&lt;br /&gt;
::Kyllähän tuo sopii. Itse käyn tosin joka tapauksessa kaikki muutokset läpi. --[[Käyttäjä:Pb|Pb]] 29. kesäkuuta 2008 kello 13.41 (EEST)&lt;br /&gt;
:::Näinhän sitä tietysti monesti tulee tehtyä, mutta tuolla konstilla ei ainakaan lipsahda mitään läpi seulasta. --[[Käyttäjä:Maakuth|Maakuth]] 29. kesäkuuta 2008 kello 15.23 (EEST)&lt;br /&gt;
::Mitenkähän noiden spämmiviestien kanssa... Pitäisikö ne merkitä tarkastetuksi siinä tapauksessa että jäljet on siivottu? --[[Käyttäjä:Maakuth|Maakuth]] 14. elokuuta 2008 kello 00.42 (EEST)&lt;br /&gt;
:::Ylläpidon palauta-napillahan nuo muuttuvat automaattisesti tarkastetuiksi (samalla kun se kumoaa saman käyttäjän kaikki peräkkäiset muokkaukset eikä vaadi erillistä muutosten tallentamista). -- Jos samaan artikkeliin tulee vandalismia monesta eri IP:stä peräkkäin, pitää tietysti painaa tarkastusnappia käsin. Toisaalta tällöin on kyllä aika selvää, että muokkaukset joka tapauksessa huomataan ja kumotaan. Eli vastaus voisi kai olla &amp;quot;jos jaksaa&amp;quot; tai &amp;quot;jos ei pidä punaisista huutomerkeistä tuoreissa muutoksissa&amp;quot;. --[[Käyttäjä:Pb|Pb]] 14. elokuuta 2008 kello 01.44 (EEST)&lt;br /&gt;
&lt;br /&gt;
==  Ohje rikkinäisen kovalevyn/tiedostojärjestelmän korjaamisesta ==&lt;br /&gt;
Ajattelin kirjoitella otsikon mukaista ohjetta (taustatarinaa, kts http://forum.ubuntu-fi.org/index.php?topic=7522.0) - Minkäslaisella otsikolla tämmöinen pitäisikannattaisi tehdä ja miten lisään sen sopiviin luokkiin? --[[Käyttäjä:Rhk|Rhk]] 24. toukokuuta 2008 kello 11.50 (EEST)&lt;br /&gt;
:Itselläni mielessä pyörivät &amp;quot;rikkinäiset tallennusvälineet&amp;quot; tai &amp;quot;tietojen pelastaminen&amp;quot;, mutta laita nyt omasta mielestäsi paras. Luokitukset saat tehtyä laittamalla sivun loppuun luokkamerkinnät tyyliin &amp;lt;nowiki&amp;gt;[[Luokka:Järjestelmä]]&amp;lt;/nowiki&amp;gt;. Katso muista sivuista mallia. --[[Käyttäjä:Maakuth|Maakuth]] 24. toukokuuta 2008 kello 13.17 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Foorumin/wikin yhdistämisestä==&lt;br /&gt;
&lt;br /&gt;
Olen tuunannut Omenamehu.org -keskustelupalstalle (käyttää SMF:ää) yhteisen autentikoinnin Mediawikin ja SMF:n välille. Jos tuon toteutus kiinnostaa, yhteyttä voi ottaa osoitteella mehumaija miukumauku omenamehu.org.&lt;br /&gt;
&lt;br /&gt;
Terveisin,&lt;br /&gt;
&lt;br /&gt;
Sami Lempinen&lt;br /&gt;
&lt;br /&gt;
5. toukokuuta 2008 kello 20.33 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Oma musta lista?==&lt;br /&gt;
Spämmibottien muokkauksia alkaa taas tulla melko rasittavan usein. Oletuksena käytettävä Metan [http://meta.wikimedia.org/wiki/Spam_blacklist musta lista] ei ilmeisestikään päivity tarpeeksi nopeaan tai on liian konservatiivinen. SpamBlacklist-laajennos [http://www.mediawiki.org/wiki/Extension:SpamBlacklist#Custom_blacklist_sources sallisi] kuitenkin päälistan ohella myös paikalliset mustat listat. Voisiko olla ideaa tehdä oma - ylläpitäjien muokattavissa oleva - musta lista? Uusien regexpien lisääminen onnistuisi tällöin ilman viivytyksiä. Omaa listaa voisi käyttää myös yleisempien ilmausten kuten &amp;quot;ringtones&amp;quot; blokkaamiseen.  --[[Käyttäjä:Pb|Pb]] 4. toukokuuta 2008 kello 16.33 (EEST)&lt;br /&gt;
:Hyvä idea. Varsinkin kun meillä on kielenä suomi niin englanninkielinen avainsanalista voisi olla varsin tehokas torjuntakeino. Etsi/laadi joku tarkka tekninen toteutusohje niin voit laittaa sen [[Linux.fi:TODO|TODO-sivulle]] Tepon huomiota odottamaan. --[[Käyttäjä:Maakuth|Maakuth]] 21. toukokuuta 2008 kello 18.38 (EEST)&lt;br /&gt;
::Tutkin asiaa ja huomasin, että jo nyt ylläpitäjät voivat lisätä domaineja, joihin linkittäminen on estetty, sivulle [[Mediawiki:Spam-blacklist]]. --[[Käyttäjä:Heikki|Heikki]] 24. toukokuuta 2008 kello 13.07 (EEST)&lt;br /&gt;
:::Ei tunnu toimivan... Tuo sivu sekä &amp;lt;tt&amp;gt;Mediawiki:Spam-whitelist&amp;lt;/tt&amp;gt; puuttuvat [[Toiminnot:Järjestelmäviestit|järjestelmäviestien listasta]], mistä ne löytyvät monissa muissa wikeissä. Vaikuttaisi siltä, että tämän wikin SpamBlacklist-laajennos on jokin vanhempi versio, joka ei vielä tue tuota toimintoa. Pitäisi varmaan pyytää Teppoa päivittämään, ja samalla asentamaan muutama muukin laajennos, joita tänne on kaivattu. --[[Käyttäjä:Pb|Pb]] 24. toukokuuta 2008 kello 21.27 (EEST)&lt;br /&gt;
::::TODO-sivun sisältö on vinkattu Tepolle, odotellaan päivityksiä... --[[Käyttäjä:Heikki|Heikki]] 24. toukokuuta 2008 kello 23.39 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Uutisten julkaiseminen==&lt;br /&gt;
Ajoittain on ehdoteltu, että tällä sivustolla alettaisiin julkaista Linux-aiheisia uutisia Suomesta ja maailmalta jossain määrin säännöllisesti. Itsekin olen ruvennut pitämään sitä ihan hyvänä ajatuksena, mutta hommaan tarvittaisiin muutamia jossain määrin sitoutuneita vapaaehtoisia, jotta touhu ei tyssäisi aivan heti. Muutenkin on vaara tarjolla että hankkeesta muodostuu &amp;quot;uutissivusto&amp;quot; jolla uutisia julkaistaan kerran kuussa tai harvemmin. Mitäpä mieltä olisitte moisesta? --[[Käyttäjä:Maakuth|Maakuth]] 3. toukokuuta 2008 kello 18.09 (EEST)&lt;br /&gt;
:Jos vapaaehtoisia todella löytyy, niin eiköhän se onnistu. Etusivulle pitäisi sitten lisätä jonkinlainen &amp;quot;uutisruutu&amp;quot;, josta olisi linkit varsinaisiin uutisartikkeleihin/uutissivulle. Näitä uutissivustoja tosin löytyy Suomesta jo ainakin kaksi kappaletta, etusivullekin linkitetty [http://tonnikala.net/ Tonnikala] sekä [http://linuxonly.info/ LinuxOnly], molemmat tällaisia kerran kuussa -sivustoja. Jos joku on valmis pidempiaikaiseen uutisten kirjoitteluun, niin miksei saman tien &amp;quot;herättäisi henkiin&amp;quot; jompaa kumpaa näistä sivustoista? --[[Käyttäjä:Pb|Pb]] 4. toukokuuta 2008 kello 13.57 (EEST)&lt;br /&gt;
&lt;br /&gt;
== TODO-lista ==&lt;br /&gt;
Eri puolilla tulee aina välillä esiin parannusehdotuksia, jotka vaativat muutoksia palvelinpuolelle. Keräsin näitä erilliselle [[Linux.fi:TODO|sivulle]], josta ne voidaan sitten sopivassa välissä vinkata Tepolle toteuttamista varten. --[[Käyttäjä:Heikki|Heikki]] 26. huhtikuuta 2008 kello 23.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Wiki 3v ==&lt;br /&gt;
Kolmevuotissynttärit olivat viime viikolla. Kiitokset kaikille muokkaajille, jatketaan samaan malliin. [http://linux.fi/foorumi/index.php?topic=201.0 Juttua keskustelualueella]. --[[Käyttäjä:Heikki|Heikki]] 26. huhtikuuta 2008 kello 22.28 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Muokkaa-linkin korostus?==&lt;br /&gt;
Ruotsin- ja englanninkielisissä Wikipedioissa sivun ylälaidan muokkaa-linkki on korostettu boldilla. Voisiko tuo kenties sopia tähänkin wikiin? Se auttaisi ainakin korostamaan, että &#039;&#039;kuka tahansa&#039;&#039; voi muokata artikkeleita, ja siten kenties toisi uusia muokkaajia. --[[Käyttäjä:Pb|Pb]] 25. huhtikuuta 2008 kello 19.35 (EEST)&lt;br /&gt;
:Hyvä ajatus. Kaipa tuo jollain css-muutoksella käy varsin kivuttomasti. --[[Käyttäjä:Maakuth|Maakuth]] 25. huhtikuuta 2008 kello 19.40 (EEST)&lt;br /&gt;
::Laitetaanpa kokeeksi... --[[Käyttäjä:Pb|Pb]] 25. huhtikuuta 2008 kello 20.10 (EEST)&lt;br /&gt;
&lt;br /&gt;
==80.223.125.28:n muokkaukset==&lt;br /&gt;
Mitä mieltä olette näistä 80.223.125.28:n [[Toiminnot:Muokkaukset/80.223.125.28|muokkauksista]]? Omasta mielestäni [[:Luokka:Jakelut|Jakelut]]-luokan jakaminen aliluokkiin äitijakeluiden perusteella lähinnä sotkee pakkaa. Jakeluryhmittäisten &amp;quot;kokoomamallineiden&amp;quot; laittaminen voisi kaiketi olla ihan hyväkin idea (vaikka onkin osittain päällekkäinen Katso myös -otsikon ja [[:Malline:Jakelu|Jakelu]]-mallineen kanssa), mikäli sen toteuttaa hivenen harkitummin ja teknisesti oikein. --[[Käyttäjä:Pb|Pb]] 5. maaliskuuta 2008 kello 16.09 (EET)&lt;br /&gt;
:En lähtisi jakamaan jakelut-luokkaa alaluokkiin, mutta jakeluartikkelien katso myös -osiota voisi osittain korvata sukulaisjakeluita listaavalla mallineella. --[[Käyttäjä:Heikki|Heikki]] 5. maaliskuuta 2008 kello 17.48 (EET)&lt;br /&gt;
&lt;br /&gt;
===Luokittelusta===&lt;br /&gt;
::[[Linux.fi:Luokitusremontti]] - Asiasta kannattanee keskustella myös luokituksen kohdalla. [[Käyttäjä:80.223.125.28|80.223.125.28]] 8. maaliskuuta 2008 kello 12.42 (EET)&lt;br /&gt;
&lt;br /&gt;
== Lisäosia ja parannusehdotus mallineeseen [[Malline:Perustietoa|perustietoa]] ==&lt;br /&gt;
&lt;br /&gt;
Tuli näin heti tähän wikiin tutustuessani esille pari ongelmakohtaa. Esimerkiksi lähteiden helppoon merkitsemiseen käytettävää &#039;&#039;[http://www.mediawiki.org/wiki/Extension:Cite Cite]&#039;&#039;-lisäosaa ei ole, eikä kyllä mitään muitakaan käyttömukavuutta parantavia lisäosia löydy.&lt;br /&gt;
&lt;br /&gt;
Koska [[Malline:Perustietoa|perustietoa-malline]] oli suojattu vain ylläpitäjien ja byrokraattien muokattavaksi, tuli mieleeni eräs &#039;&#039;ParserFunctions&#039;&#039;-lisäosan vaativa parannusehdotus &amp;lt;small&amp;gt;([http://meta.wikimedia.org/wiki/ParserFunctions#Installation asennusohje Metassa])&amp;lt;/small&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[Malline:Perustietoa]]&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on {{#if: {{{1|}}} | [[wikipedia:fi:{{{1}}}|Wikipedia]] | [http://fi.wikipedia.org/ Wikipedia]}}. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Perustietoa}}&amp;lt;/nowiki&amp;gt;:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on [http://fi.wikipedia.org/ Wikipedia]. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Perustietoa|Hiiri (osoitinlaite)}}&amp;lt;/nowiki&amp;gt;:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on [[wikipedia:fi:Hiiri (osoitinlaite)|Wikipedia]]. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Olisivatko nämä vain haaveita vai jopa mahdollisia ottaa käyttöön? — [[Käyttäjä:Str4nd|Str4nd]] 22. lokakuuta 2007 kello 19.11 (EEST)&lt;br /&gt;
:Uusista lisäosista täytyy neuvotella [[Käyttäjä:Teppo|Tepon]] kanssa, joka on Linux.fi:n laitteistoylläpitäjä. Etukäteen täytyy tietysti keskustella, mille kaikelle on tarvetta eli mitä me osaamme/jaksamme/viitsimme hyödyntää. --[[Käyttäjä:Pb|Pb]] 22. lokakuuta 2007 kello 20.02 (EEST)&lt;br /&gt;
:: Kyllä, olisi hyvä saada tähän samaan keskusteluun muitakin tarvittavia lisäosia ja keskustelua niiden tarpeellisuudesta (esim. äänestys), ettei tarvitsisi säätää asetuksia useita kertoja. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 23. lokakuuta 2007 kello 12.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Ainakin tuo &#039;&#039;ParserFunctions&#039;&#039;-lisäosa vaikuttaa kätevältä. Lähdemerkinnöille ei monissa artikkeleissa ole tarvetta, mutta tuskin ne mahdollistavasta liitännäisestä haittaakaan olisi. En tunne juurikaan Mediawikin liitännäisiä, joten en oikein tiedä, mitä siellä oikein on tarjolla. Muita ehdotuksia? Asennus ei ainakaan näytä pahalta, tosin voi olla, että ainakin toistaiseksi käytössä oleva php4 ja vanhahko mediawiki tuottavat ongelmia. --[[Käyttäjä:Heikki|Heikki]] 23. lokakuuta 2007 kello 19.26 (EEST)&lt;br /&gt;
::::MediaWikin lisäosat löytyvät [http://www.mediawiki.org/wiki/Category:Extensions MediaWikin sivuilta], Wikipedian lisäosat löytyvät Wikipedian [[wikipedia:fi:Toiminnot:Versio|Toiminnot:Versiosta]], kuitenkin suurin osa Wikipediaan asennetuista lisäosista on hyödyttömiä tänne asennettuna. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 24. lokakuuta 2007 kello 12.14 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::::Muutamia lisäosia joita voisi harkita, pistin joskus irkkiin, mutta laitan vielä tänne muistiin: &#039;&#039;newuserlog, renameuser, user merge and delete, gadgets, configure, mibbit (selain-irc), apc (vaatii 1.13, eikä täällä vissiin ole edes apc:tä), categorytree, cleanchanges, dismissable sitenotice&#039;&#039; – [[Käyttäjä:Nike|Nike]] 14. toukokuuta 2008 kello 13.32 (EEST)&lt;br /&gt;
&lt;br /&gt;
=== /index.php -&amp;gt; /wiki + /w? ===&lt;br /&gt;
Parannusehdotuksiin liittyen: Voisiko Teppo päivitellä myös MediaWikiä niin, ettei index.php:tä enää näkyisi? Ohjeet löytyvät [http://www.mediawiki.org/wiki/Manual:Short_URL MediaWikin sivuilta]. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 27. lokakuuta 2007 kello 18.29 (EEST)&lt;br /&gt;
&lt;br /&gt;
ModRewritellä pitäisi onnistua Wiki-sivujen osoitteet tyyliin http://linux.fi/Synaptic. Nykyinen tyylli http://linux.fi/index.php/Synaptic on turhan pitkä..--[[Käyttäjä:80.221.60.224|80.221.60.224]] 21. tammikuuta 2008 kello 13.02 (EET)&lt;br /&gt;
&lt;br /&gt;
.htaccess-tiedosto (ei testattu):&lt;br /&gt;
 RewriteRule ^([^/]+).html	/index.php/$1&lt;br /&gt;
&lt;br /&gt;
==Linux.fi==&lt;br /&gt;
Mitä tältä sivulta odotetaan, halutaan tai toivotaan? Wikissä alkaa hiljalleen olla hyvänlaisesti materiaalia, ja foorumi on ilmeisesti piakkoin tulossa. Kertokaapas mitä muuta kivaa tämä sivu voisi suomenkielisille avoimen lähdekoodin käyttäjille tarjota. --[[Käyttäjä:Maakuth|Maakuth]] 12. elokuuta 2007 kello 00.47 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Virallinen suhde [http://lokalisointi.org kotoistamiseen]? ==&lt;br /&gt;
Tulipa tuossa mieleen että mitä ovat täällä wikittelijät mieltä ohjelmien [http://lokalisointi.org kotoistamisesta]? Onhan tuo aika iso osa avoimen lähdekoodin suuntauksista ja eduista, notta olisikohan foorumikohtainen ja/tai yleisempi sanakirja[http://lokalisointi.org/sanakirja/] paikallaan? Emmehän me tahdo [http://fi.wikipedia.org/wiki/Anglismi anglisteiksi] rueta, emmehän? Hieman eppäilyttää jotkut front- ja backendit, rootit ja adminit sun muut, mitkä eivät edes ole varsinaista suomea. Kuulostanee varmaan koomiselta mutta anglismin seurauksena suomenkieli kuihtuu kun riittävän pitkälle ajassa mennään :)&lt;br /&gt;
&lt;br /&gt;
Yours truly,&lt;br /&gt;
&lt;br /&gt;
--[[Käyttäjä:V|V]] @ 8. heinäkuuta 2007 kello 19.49 (EEST)&lt;br /&gt;
:[[Linux.fi:Merkitsemiskäytäntöjä|Merkitsemiskäytännöissä]] ilmaistaan selkeästi tämän wikin kielelliset periaatteet. Joillekin termeille vaan ei välttämättä ole kunnollisia suomennoksia, tai niitä ei kukaan käytä, mistä johtuen pitemmälle ehtinyt harrastaja ei edes tunnista tuttujen termien suomenkielisiä vastineita. Ainakin itse tarkistan aina lokalisointi.orgista, löytyisikö termille jokin suomennos. Alkuperäiset englanninkieliset termit on kuitenkin syytä jättää sulkeisiin suomennoksen ohelle, jotta sen tunnistavat nekin, jotka eivät vielä ole suomennosta nähneet. --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.18 (EEST)&lt;br /&gt;
:Lisäksi omien sanojensa tueksi voisi kannattaa ottaa vaikkapa kuvankaappaukset suomennetuista ohjelmista englanninkielisten sijaan, ja vältellä häröjä otsikoita kuten &amp;quot;GUI kehoitteet&amp;quot;. Ja se on muuten kehote eikä kehoite :) --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.49 (EEST)&lt;br /&gt;
::Asia ymmärretty. --[[Käyttäjä:V|V]] 8. heinäkuuta 2007 kello 20.58 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Taas yksi heikosti tehty ohje lisää ==&lt;br /&gt;
--[[Käyttäjä:Peran|Peran]] 17. elokuuta 2008 kello 03.36 (EEST)&lt;br /&gt;
http://linux.fi/index.php/TulostusCDlevynPinnalle&lt;br /&gt;
Tuli tehdyksi tälläinen oksennus wikiin. En osaa kovinkaan hyvin käyttää tätä MediaWiki-ohjelmistoa. Josko joku ystävällinen sielu parantelisi ulkoasua ja luokittelisi ko. sivun. Mulla ei myöskään ole hahmotusta Linux.fi:n luokittelusta, mutta yleinen Linux-ohje tämä kuitenkin on, ja perustuu Ubuntu-foorumin ohjeeseen: http://forum.ubuntu-fi.org/index.php?topic=4790&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=22386</id>
		<title>Linux.fi:Kahvihuone</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=22386"/>
		<updated>2008-08-17T00:36:21Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{kevytsuojattu}}&lt;br /&gt;
&#039;&#039;&#039;HUOM!&#039;&#039;&#039; Lisääthän uudet keskusteluaiheet kahvihuoneen alkuun, niin sivu pysyy selkeämpänä. Hyvän tavan mukaista on myös käyttää &amp;lt;nowiki&amp;gt;--~~~~~&amp;lt;/nowiki&amp;gt; -merkintää viestien lopussa, jotta kirjoittaja ja kirjoitusaika jäisivät selvemmin esille. &lt;br /&gt;
&lt;br /&gt;
Vanhat keskustelut on arkistoitu sivulle [[Arkisto:Kahvihuone]].&lt;br /&gt;
&lt;br /&gt;
==Muutosten tarkastaminen==&lt;br /&gt;
Otetaanko ylläpidossa käyttöön tuo muutosten tarkastaminen? Eli kun vilkaisee jotain rekisteröimättömän käyttäjän tekemää muutosta, pitäisi painaa &amp;quot;merkitse tarkastetuksi&amp;quot; -linkkiä, niin huutomerkit häviäivät muutosten listalta. Tällä saataisiin pienten muutosten seuraaminen helpommaksi kun ei kaikkien tarvitsisi vilkaista. --[[Käyttäjä:Maakuth|Maakuth]] 28. kesäkuuta 2008 kello 14.20 (EEST)&lt;br /&gt;
:Eipä tuon ominaisuuden hyötykäytöstä mitään haittaakaan ole, eli aletaan vaan klikkailemaan tuota linkkiä. --[[Käyttäjä:Heikki|Heikki]] 28. kesäkuuta 2008 kello 22.35 (EEST)&lt;br /&gt;
::Kyllähän tuo sopii. Itse käyn tosin joka tapauksessa kaikki muutokset läpi. --[[Käyttäjä:Pb|Pb]] 29. kesäkuuta 2008 kello 13.41 (EEST)&lt;br /&gt;
:::Näinhän sitä tietysti monesti tulee tehtyä, mutta tuolla konstilla ei ainakaan lipsahda mitään läpi seulasta. --[[Käyttäjä:Maakuth|Maakuth]] 29. kesäkuuta 2008 kello 15.23 (EEST)&lt;br /&gt;
::Mitenkähän noiden spämmiviestien kanssa... Pitäisikö ne merkitä tarkastetuksi siinä tapauksessa että jäljet on siivottu? --[[Käyttäjä:Maakuth|Maakuth]] 14. elokuuta 2008 kello 00.42 (EEST)&lt;br /&gt;
:::Ylläpidon palauta-napillahan nuo muuttuvat automaattisesti tarkastetuiksi (samalla kun se kumoaa saman käyttäjän kaikki peräkkäiset muokkaukset eikä vaadi erillistä muutosten tallentamista). -- Jos samaan artikkeliin tulee vandalismia monesta eri IP:stä peräkkäin, pitää tietysti painaa tarkastusnappia käsin. Toisaalta tällöin on kyllä aika selvää, että muokkaukset joka tapauksessa huomataan ja kumotaan. Eli vastaus voisi kai olla &amp;quot;jos jaksaa&amp;quot; tai &amp;quot;jos ei pidä punaisista huutomerkeistä tuoreissa muutoksissa&amp;quot;. --[[Käyttäjä:Pb|Pb]] 14. elokuuta 2008 kello 01.44 (EEST)&lt;br /&gt;
&lt;br /&gt;
==  Ohje rikkinäisen kovalevyn/tiedostojärjestelmän korjaamisesta ==&lt;br /&gt;
Ajattelin kirjoitella otsikon mukaista ohjetta (taustatarinaa, kts http://forum.ubuntu-fi.org/index.php?topic=7522.0) - Minkäslaisella otsikolla tämmöinen pitäisikannattaisi tehdä ja miten lisään sen sopiviin luokkiin? --[[Käyttäjä:Rhk|Rhk]] 24. toukokuuta 2008 kello 11.50 (EEST)&lt;br /&gt;
:Itselläni mielessä pyörivät &amp;quot;rikkinäiset tallennusvälineet&amp;quot; tai &amp;quot;tietojen pelastaminen&amp;quot;, mutta laita nyt omasta mielestäsi paras. Luokitukset saat tehtyä laittamalla sivun loppuun luokkamerkinnät tyyliin &amp;lt;nowiki&amp;gt;[[Luokka:Järjestelmä]]&amp;lt;/nowiki&amp;gt;. Katso muista sivuista mallia. --[[Käyttäjä:Maakuth|Maakuth]] 24. toukokuuta 2008 kello 13.17 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Foorumin/wikin yhdistämisestä==&lt;br /&gt;
&lt;br /&gt;
Olen tuunannut Omenamehu.org -keskustelupalstalle (käyttää SMF:ää) yhteisen autentikoinnin Mediawikin ja SMF:n välille. Jos tuon toteutus kiinnostaa, yhteyttä voi ottaa osoitteella mehumaija miukumauku omenamehu.org.&lt;br /&gt;
&lt;br /&gt;
Terveisin,&lt;br /&gt;
&lt;br /&gt;
Sami Lempinen&lt;br /&gt;
&lt;br /&gt;
5. toukokuuta 2008 kello 20.33 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Oma musta lista?==&lt;br /&gt;
Spämmibottien muokkauksia alkaa taas tulla melko rasittavan usein. Oletuksena käytettävä Metan [http://meta.wikimedia.org/wiki/Spam_blacklist musta lista] ei ilmeisestikään päivity tarpeeksi nopeaan tai on liian konservatiivinen. SpamBlacklist-laajennos [http://www.mediawiki.org/wiki/Extension:SpamBlacklist#Custom_blacklist_sources sallisi] kuitenkin päälistan ohella myös paikalliset mustat listat. Voisiko olla ideaa tehdä oma - ylläpitäjien muokattavissa oleva - musta lista? Uusien regexpien lisääminen onnistuisi tällöin ilman viivytyksiä. Omaa listaa voisi käyttää myös yleisempien ilmausten kuten &amp;quot;ringtones&amp;quot; blokkaamiseen.  --[[Käyttäjä:Pb|Pb]] 4. toukokuuta 2008 kello 16.33 (EEST)&lt;br /&gt;
:Hyvä idea. Varsinkin kun meillä on kielenä suomi niin englanninkielinen avainsanalista voisi olla varsin tehokas torjuntakeino. Etsi/laadi joku tarkka tekninen toteutusohje niin voit laittaa sen [[Linux.fi:TODO|TODO-sivulle]] Tepon huomiota odottamaan. --[[Käyttäjä:Maakuth|Maakuth]] 21. toukokuuta 2008 kello 18.38 (EEST)&lt;br /&gt;
::Tutkin asiaa ja huomasin, että jo nyt ylläpitäjät voivat lisätä domaineja, joihin linkittäminen on estetty, sivulle [[Mediawiki:Spam-blacklist]]. --[[Käyttäjä:Heikki|Heikki]] 24. toukokuuta 2008 kello 13.07 (EEST)&lt;br /&gt;
:::Ei tunnu toimivan... Tuo sivu sekä &amp;lt;tt&amp;gt;Mediawiki:Spam-whitelist&amp;lt;/tt&amp;gt; puuttuvat [[Toiminnot:Järjestelmäviestit|järjestelmäviestien listasta]], mistä ne löytyvät monissa muissa wikeissä. Vaikuttaisi siltä, että tämän wikin SpamBlacklist-laajennos on jokin vanhempi versio, joka ei vielä tue tuota toimintoa. Pitäisi varmaan pyytää Teppoa päivittämään, ja samalla asentamaan muutama muukin laajennos, joita tänne on kaivattu. --[[Käyttäjä:Pb|Pb]] 24. toukokuuta 2008 kello 21.27 (EEST)&lt;br /&gt;
::::TODO-sivun sisältö on vinkattu Tepolle, odotellaan päivityksiä... --[[Käyttäjä:Heikki|Heikki]] 24. toukokuuta 2008 kello 23.39 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Uutisten julkaiseminen==&lt;br /&gt;
Ajoittain on ehdoteltu, että tällä sivustolla alettaisiin julkaista Linux-aiheisia uutisia Suomesta ja maailmalta jossain määrin säännöllisesti. Itsekin olen ruvennut pitämään sitä ihan hyvänä ajatuksena, mutta hommaan tarvittaisiin muutamia jossain määrin sitoutuneita vapaaehtoisia, jotta touhu ei tyssäisi aivan heti. Muutenkin on vaara tarjolla että hankkeesta muodostuu &amp;quot;uutissivusto&amp;quot; jolla uutisia julkaistaan kerran kuussa tai harvemmin. Mitäpä mieltä olisitte moisesta? --[[Käyttäjä:Maakuth|Maakuth]] 3. toukokuuta 2008 kello 18.09 (EEST)&lt;br /&gt;
:Jos vapaaehtoisia todella löytyy, niin eiköhän se onnistu. Etusivulle pitäisi sitten lisätä jonkinlainen &amp;quot;uutisruutu&amp;quot;, josta olisi linkit varsinaisiin uutisartikkeleihin/uutissivulle. Näitä uutissivustoja tosin löytyy Suomesta jo ainakin kaksi kappaletta, etusivullekin linkitetty [http://tonnikala.net/ Tonnikala] sekä [http://linuxonly.info/ LinuxOnly], molemmat tällaisia kerran kuussa -sivustoja. Jos joku on valmis pidempiaikaiseen uutisten kirjoitteluun, niin miksei saman tien &amp;quot;herättäisi henkiin&amp;quot; jompaa kumpaa näistä sivustoista? --[[Käyttäjä:Pb|Pb]] 4. toukokuuta 2008 kello 13.57 (EEST)&lt;br /&gt;
&lt;br /&gt;
== TODO-lista ==&lt;br /&gt;
Eri puolilla tulee aina välillä esiin parannusehdotuksia, jotka vaativat muutoksia palvelinpuolelle. Keräsin näitä erilliselle [[Linux.fi:TODO|sivulle]], josta ne voidaan sitten sopivassa välissä vinkata Tepolle toteuttamista varten. --[[Käyttäjä:Heikki|Heikki]] 26. huhtikuuta 2008 kello 23.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Wiki 3v ==&lt;br /&gt;
Kolmevuotissynttärit olivat viime viikolla. Kiitokset kaikille muokkaajille, jatketaan samaan malliin. [http://linux.fi/foorumi/index.php?topic=201.0 Juttua keskustelualueella]. --[[Käyttäjä:Heikki|Heikki]] 26. huhtikuuta 2008 kello 22.28 (EEST)&lt;br /&gt;
&lt;br /&gt;
==Muokkaa-linkin korostus?==&lt;br /&gt;
Ruotsin- ja englanninkielisissä Wikipedioissa sivun ylälaidan muokkaa-linkki on korostettu boldilla. Voisiko tuo kenties sopia tähänkin wikiin? Se auttaisi ainakin korostamaan, että &#039;&#039;kuka tahansa&#039;&#039; voi muokata artikkeleita, ja siten kenties toisi uusia muokkaajia. --[[Käyttäjä:Pb|Pb]] 25. huhtikuuta 2008 kello 19.35 (EEST)&lt;br /&gt;
:Hyvä ajatus. Kaipa tuo jollain css-muutoksella käy varsin kivuttomasti. --[[Käyttäjä:Maakuth|Maakuth]] 25. huhtikuuta 2008 kello 19.40 (EEST)&lt;br /&gt;
::Laitetaanpa kokeeksi... --[[Käyttäjä:Pb|Pb]] 25. huhtikuuta 2008 kello 20.10 (EEST)&lt;br /&gt;
&lt;br /&gt;
==80.223.125.28:n muokkaukset==&lt;br /&gt;
Mitä mieltä olette näistä 80.223.125.28:n [[Toiminnot:Muokkaukset/80.223.125.28|muokkauksista]]? Omasta mielestäni [[:Luokka:Jakelut|Jakelut]]-luokan jakaminen aliluokkiin äitijakeluiden perusteella lähinnä sotkee pakkaa. Jakeluryhmittäisten &amp;quot;kokoomamallineiden&amp;quot; laittaminen voisi kaiketi olla ihan hyväkin idea (vaikka onkin osittain päällekkäinen Katso myös -otsikon ja [[:Malline:Jakelu|Jakelu]]-mallineen kanssa), mikäli sen toteuttaa hivenen harkitummin ja teknisesti oikein. --[[Käyttäjä:Pb|Pb]] 5. maaliskuuta 2008 kello 16.09 (EET)&lt;br /&gt;
:En lähtisi jakamaan jakelut-luokkaa alaluokkiin, mutta jakeluartikkelien katso myös -osiota voisi osittain korvata sukulaisjakeluita listaavalla mallineella. --[[Käyttäjä:Heikki|Heikki]] 5. maaliskuuta 2008 kello 17.48 (EET)&lt;br /&gt;
&lt;br /&gt;
===Luokittelusta===&lt;br /&gt;
::[[Linux.fi:Luokitusremontti]] - Asiasta kannattanee keskustella myös luokituksen kohdalla. [[Käyttäjä:80.223.125.28|80.223.125.28]] 8. maaliskuuta 2008 kello 12.42 (EET)&lt;br /&gt;
&lt;br /&gt;
== Lisäosia ja parannusehdotus mallineeseen [[Malline:Perustietoa|perustietoa]] ==&lt;br /&gt;
&lt;br /&gt;
Tuli näin heti tähän wikiin tutustuessani esille pari ongelmakohtaa. Esimerkiksi lähteiden helppoon merkitsemiseen käytettävää &#039;&#039;[http://www.mediawiki.org/wiki/Extension:Cite Cite]&#039;&#039;-lisäosaa ei ole, eikä kyllä mitään muitakaan käyttömukavuutta parantavia lisäosia löydy.&lt;br /&gt;
&lt;br /&gt;
Koska [[Malline:Perustietoa|perustietoa-malline]] oli suojattu vain ylläpitäjien ja byrokraattien muokattavaksi, tuli mieleeni eräs &#039;&#039;ParserFunctions&#039;&#039;-lisäosan vaativa parannusehdotus &amp;lt;small&amp;gt;([http://meta.wikimedia.org/wiki/ParserFunctions#Installation asennusohje Metassa])&amp;lt;/small&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[Malline:Perustietoa]]&#039;&#039;:&amp;lt;br /&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on {{#if: {{{1|}}} | [[wikipedia:fi:{{{1}}}|Wikipedia]] | [http://fi.wikipedia.org/ Wikipedia]}}. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Perustietoa}}&amp;lt;/nowiki&amp;gt;:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on [http://fi.wikipedia.org/ Wikipedia]. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Perustietoa|Hiiri (osoitinlaite)}}&amp;lt;/nowiki&amp;gt;:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0; margin-top:10px; border:1px solid #aaa; padding: 0.2em 1em 0.2em 1em; background-color:#F8F8FF; align:right; font-size:1em&amp;quot;&amp;gt;&lt;br /&gt;
Tämä otsikko on perustietoa, jolle parempi paikka on [[wikipedia:fi:Hiiri (osoitinlaite)|Wikipedia]]. Tässä wikissä se sisältää pääasiallisesti Linux-erikoistietoa.&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Olisivatko nämä vain haaveita vai jopa mahdollisia ottaa käyttöön? — [[Käyttäjä:Str4nd|Str4nd]] 22. lokakuuta 2007 kello 19.11 (EEST)&lt;br /&gt;
:Uusista lisäosista täytyy neuvotella [[Käyttäjä:Teppo|Tepon]] kanssa, joka on Linux.fi:n laitteistoylläpitäjä. Etukäteen täytyy tietysti keskustella, mille kaikelle on tarvetta eli mitä me osaamme/jaksamme/viitsimme hyödyntää. --[[Käyttäjä:Pb|Pb]] 22. lokakuuta 2007 kello 20.02 (EEST)&lt;br /&gt;
:: Kyllä, olisi hyvä saada tähän samaan keskusteluun muitakin tarvittavia lisäosia ja keskustelua niiden tarpeellisuudesta (esim. äänestys), ettei tarvitsisi säätää asetuksia useita kertoja. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 23. lokakuuta 2007 kello 12.11 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::Ainakin tuo &#039;&#039;ParserFunctions&#039;&#039;-lisäosa vaikuttaa kätevältä. Lähdemerkinnöille ei monissa artikkeleissa ole tarvetta, mutta tuskin ne mahdollistavasta liitännäisestä haittaakaan olisi. En tunne juurikaan Mediawikin liitännäisiä, joten en oikein tiedä, mitä siellä oikein on tarjolla. Muita ehdotuksia? Asennus ei ainakaan näytä pahalta, tosin voi olla, että ainakin toistaiseksi käytössä oleva php4 ja vanhahko mediawiki tuottavat ongelmia. --[[Käyttäjä:Heikki|Heikki]] 23. lokakuuta 2007 kello 19.26 (EEST)&lt;br /&gt;
::::MediaWikin lisäosat löytyvät [http://www.mediawiki.org/wiki/Category:Extensions MediaWikin sivuilta], Wikipedian lisäosat löytyvät Wikipedian [[wikipedia:fi:Toiminnot:Versio|Toiminnot:Versiosta]], kuitenkin suurin osa Wikipediaan asennetuista lisäosista on hyödyttömiä tänne asennettuna. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 24. lokakuuta 2007 kello 12.14 (EEST)&lt;br /&gt;
&lt;br /&gt;
:::::Muutamia lisäosia joita voisi harkita, pistin joskus irkkiin, mutta laitan vielä tänne muistiin: &#039;&#039;newuserlog, renameuser, user merge and delete, gadgets, configure, mibbit (selain-irc), apc (vaatii 1.13, eikä täällä vissiin ole edes apc:tä), categorytree, cleanchanges, dismissable sitenotice&#039;&#039; – [[Käyttäjä:Nike|Nike]] 14. toukokuuta 2008 kello 13.32 (EEST)&lt;br /&gt;
&lt;br /&gt;
=== /index.php -&amp;gt; /wiki + /w? ===&lt;br /&gt;
Parannusehdotuksiin liittyen: Voisiko Teppo päivitellä myös MediaWikiä niin, ettei index.php:tä enää näkyisi? Ohjeet löytyvät [http://www.mediawiki.org/wiki/Manual:Short_URL MediaWikin sivuilta]. --[[Käyttäjä:Str4nd|str4nd]] &amp;lt;small style=&amp;quot;color:grey&amp;quot;&amp;gt;([[Keskustelu käyttäjästä:Str4nd|jutskaa]])&amp;lt;/small&amp;gt; 27. lokakuuta 2007 kello 18.29 (EEST)&lt;br /&gt;
&lt;br /&gt;
ModRewritellä pitäisi onnistua Wiki-sivujen osoitteet tyyliin http://linux.fi/Synaptic. Nykyinen tyylli http://linux.fi/index.php/Synaptic on turhan pitkä..--[[Käyttäjä:80.221.60.224|80.221.60.224]] 21. tammikuuta 2008 kello 13.02 (EET)&lt;br /&gt;
&lt;br /&gt;
.htaccess-tiedosto (ei testattu):&lt;br /&gt;
 RewriteRule ^([^/]+).html	/index.php/$1&lt;br /&gt;
&lt;br /&gt;
==Linux.fi==&lt;br /&gt;
Mitä tältä sivulta odotetaan, halutaan tai toivotaan? Wikissä alkaa hiljalleen olla hyvänlaisesti materiaalia, ja foorumi on ilmeisesti piakkoin tulossa. Kertokaapas mitä muuta kivaa tämä sivu voisi suomenkielisille avoimen lähdekoodin käyttäjille tarjota. --[[Käyttäjä:Maakuth|Maakuth]] 12. elokuuta 2007 kello 00.47 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Virallinen suhde [http://lokalisointi.org kotoistamiseen]? ==&lt;br /&gt;
Tulipa tuossa mieleen että mitä ovat täällä wikittelijät mieltä ohjelmien [http://lokalisointi.org kotoistamisesta]? Onhan tuo aika iso osa avoimen lähdekoodin suuntauksista ja eduista, notta olisikohan foorumikohtainen ja/tai yleisempi sanakirja[http://lokalisointi.org/sanakirja/] paikallaan? Emmehän me tahdo [http://fi.wikipedia.org/wiki/Anglismi anglisteiksi] rueta, emmehän? Hieman eppäilyttää jotkut front- ja backendit, rootit ja adminit sun muut, mitkä eivät edes ole varsinaista suomea. Kuulostanee varmaan koomiselta mutta anglismin seurauksena suomenkieli kuihtuu kun riittävän pitkälle ajassa mennään :)&lt;br /&gt;
&lt;br /&gt;
Yours truly,&lt;br /&gt;
&lt;br /&gt;
--[[Käyttäjä:V|V]] @ 8. heinäkuuta 2007 kello 19.49 (EEST)&lt;br /&gt;
:[[Linux.fi:Merkitsemiskäytäntöjä|Merkitsemiskäytännöissä]] ilmaistaan selkeästi tämän wikin kielelliset periaatteet. Joillekin termeille vaan ei välttämättä ole kunnollisia suomennoksia, tai niitä ei kukaan käytä, mistä johtuen pitemmälle ehtinyt harrastaja ei edes tunnista tuttujen termien suomenkielisiä vastineita. Ainakin itse tarkistan aina lokalisointi.orgista, löytyisikö termille jokin suomennos. Alkuperäiset englanninkieliset termit on kuitenkin syytä jättää sulkeisiin suomennoksen ohelle, jotta sen tunnistavat nekin, jotka eivät vielä ole suomennosta nähneet. --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.18 (EEST)&lt;br /&gt;
:Lisäksi omien sanojensa tueksi voisi kannattaa ottaa vaikkapa kuvankaappaukset suomennetuista ohjelmista englanninkielisten sijaan, ja vältellä häröjä otsikoita kuten &amp;quot;GUI kehoitteet&amp;quot;. Ja se on muuten kehote eikä kehoite :) --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.49 (EEST)&lt;br /&gt;
::Asia ymmärretty. --[[Käyttäjä:V|V]] 8. heinäkuuta 2007 kello 20.58 (EEST)&lt;br /&gt;
&lt;br /&gt;
--[[Käyttäjä:Peran|Peran]] 17. elokuuta 2008 kello 03.36 (EEST)&lt;br /&gt;
http://linux.fi/index.php/TulostusCDlevynPinnalle&lt;br /&gt;
Tuli tehdyksi tälläinen oksennus wikiin. En osaa kovinkaan hyvin käyttää tätä MediaWiki-ohjelmistoa. Josko joku ystävällinen sielu parantelisi ulkoasua ja luokittelisi ko. sivun. Mulla ei myöskään ole hahmotusta Linux.fi:n luokittelusta, mutta yleinen Linux-ohje tämä kuitenkin on, ja perustuu Ubuntu-foorumin ohjeeseen: http://forum.ubuntu-fi.org/index.php?topic=4790&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=16852</id>
		<title>Linux.fi:Kahvihuone</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Linux.fi:Kahvihuone&amp;diff=16852"/>
		<updated>2007-08-31T21:07:48Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Kehitysidea */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;HUOM!&#039;&#039;&#039; Lisääthän uudet keskusteluaiheet kahvihuoneen alkuun, niin sivu pysyy selkeämpänä. Hyvän tavan mukaista on myös käyttää &amp;lt;nowiki&amp;gt;--~~~~~&amp;lt;/nowiki&amp;gt; -merkintää viestien lopussa, jotta kirjoittaja ja kirjoitusaika jäisivät selvemmin esille. &lt;br /&gt;
&lt;br /&gt;
Vanhat keskustelut on arkistoitu sivulle [[Arkisto:Kahvihuone]].&lt;br /&gt;
&lt;br /&gt;
==Linux.fi==&lt;br /&gt;
Mitä tältä sivulta odotetaan, halutaan tai toivotaan? Wikissä alkaa hiljalleen olla hyvänlaisesti materiaalia, ja foorumi on ilmeisesti piakkoin tulossa. Kertokaapas mitä muuta kivaa tämä sivu voisi suomenkielisille avoimen lähdekoodin käyttäjille tarjota. --[[Käyttäjä:Maakuth|Maakuth]] 12. elokuuta 2007 kello 00.47 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Virallinen suhde [http://lokalisointi.org kotoistamiseen]? ==&lt;br /&gt;
Tulipa tuossa mieleen että mitä ovat täällä wikittelijät mieltä ohjelmien [http://lokalisointi.org kotoistamisesta]? Onhan tuo aika iso osa avoimen lähdekoodin suuntauksista ja eduista, notta olisikohan foorumikohtainen ja/tai yleisempi sanakirja[http://lokalisointi.org/sanakirja/] paikallaan? Emmehän me tahdo [http://fi.wikipedia.org/wiki/Anglismi anglisteiksi] rueta, emmehän? Hieman eppäilyttää jotkut front- ja backendit, rootit ja adminit sun muut, mitkä eivät edes ole varsinaista suomea. Kuulostanee varmaan koomiselta mutta anglismin seurauksena suomenkieli kuihtuu kun riittävän pitkälle ajassa mennään :)&lt;br /&gt;
&lt;br /&gt;
Yours truly,&lt;br /&gt;
&lt;br /&gt;
--[[Käyttäjä:V|V]] @ 8. heinäkuuta 2007 kello 19.49 (EEST)&lt;br /&gt;
:[[Linux.fi:Merkitsemiskäytäntöjä|Merkitsemiskäytännöissä]] ilmaistaan selkeästi tämän wikin kielelliset periaatteet. Joillekin termeille vaan ei välttämättä ole kunnollisia suomennoksia, tai niitä ei kukaan käytä, mistä johtuen pitemmälle ehtinyt harrastaja ei edes tunnista tuttujen termien suomenkielisiä vastineita. Ainakin itse tarkistan aina lokalisointi.orgista, löytyisikö termille jokin suomennos. Alkuperäiset englanninkieliset termit on kuitenkin syytä jättää sulkeisiin suomennoksen ohelle, jotta sen tunnistavat nekin, jotka eivät vielä ole suomennosta nähneet. --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.18 (EEST)&lt;br /&gt;
:Lisäksi omien sanojensa tueksi voisi kannattaa ottaa vaikkapa kuvankaappaukset suomennetuista ohjelmista englanninkielisten sijaan, ja vältellä häröjä otsikoita kuten &amp;quot;GUI kehoitteet&amp;quot;. Ja se on muuten kehote eikä kehoite :) --[[Käyttäjä:Maakuth|Maakuth]] 8. heinäkuuta 2007 kello 20.49 (EEST)&lt;br /&gt;
::Asia ymmärretty. --[[Käyttäjä:V|V]] 8. heinäkuuta 2007 kello 20.58 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Google-mainokset ==&lt;br /&gt;
IRCissä heräsi keskustelua Google-mainosten lisäämisestä wikiin. Tulojen avulla voitaisiin palkata ylläpitoa tai kirjoittajia kehittämään tätä wikiä eteenpäin työkseen. Mitä sanoo kansa? --[[Käyttäjä:Maakuth|Maakuth]] 23. toukokuuta 2007 kello 10.36 (EEST)&lt;br /&gt;
:Ajatus on hyvä. Ainakin voitaisiin kokeilla, saako niistä oikeasti tuloja. Samalla pitäisi kuitenkin painottaa, että mainostulot ovat wikin kehittämistä varten, etteivät käyttäjät pelästy ja pidä sivustoa vain Mpolin rahasampona. Jos esimerkiksi samalla alettaisiin julkaisemaan sql-dumppeja, voitaisiin hälventää mahdollisia epäilyksiä. --[[Käyttäjä:Heikki|Heikki]] 23. toukokuuta 2007 kello 13.08 (EEST)&lt;br /&gt;
::Tuskin niistä mainoksista kovin suuria tuloja on odotettavissa, 100e/vuosi saattaa olla jo ihan hyvin. Tämä on myös pienin summa, mitä Google suostuu maksamaan. Oma juttunsa on se, että maksut perustuvat tehtyjen klikkausten määrään. Jos Google on havaitsevinaan &amp;quot;epäasiallisia klikkauksia&amp;quot; eli massaklikkailua, voivat he irtisanoa sopimuksen esittämättä asiasta mitään todisteita ja samalla myöskään maksamatta mitään. Vaikea minun on myöskään keksiä mitään järkevää käyttöä noille mainosrahoille lukuunottamatta palvelinkustannusten osittaista kattamista (tämä on puhtaasti Tepon asia). Jos varsinaisesta artikkelien kirjoittamisesta jollekulle maksettaisiin, tulisi kysymykseen lähinnä se, että jollekin meistä wikiä nyt jo harrastuspohjalta kehittävälle maksettaisiin esimerkiksi yhden viikonlopun työstä jonkin erityisen hienon artikkelin kirjoittamisessa. Jotenkin kuitenkin tuntuu kovin hassulta ajatukselta, että ensin pitkän vaivan ja odotuksen päätteeksi saataisiin jokin pienehkö rahasumma kokoon, joka sitten ilmeisesti yhteisellä äänestyksellä annettaisiin jollekulle siitä hyvästä, että hän vähän aikaa muokkaisi wikiä suurinpiirtein samaan tyyliin kuin aina ennenkin. Varsinaisten ulkopuolisten palkkaaminen taas on käytännössä mahdoton ajatus, sillä he tuskin erityisen halvalla suostuvat työskentelemään. Toisekseen pelkästään sopivan henkilön löytäminen veisi todennäköisesti niin paljon aikaa, että olisimme jo itse ehtineet siinä ajassa kyseisen artikkelin kirjoittamaan. Valmiin sisällön siirtämiseen tänne en myöskään usko, sillä ei-vapaaehtoispohjalta tehtynä se tapaa myös olla harvinaisen kallista puuhaa. Vapaaehtoisesti näin tekevät sen sijaan harvoin edes kaipaavat minkäänlaista korvausta. --[[Käyttäjä:Pb|Pb]] 23. toukokuuta 2007 kello 23.08 (EEST)&lt;br /&gt;
:::Tuotosta en osaa sanoa kun ei ole kokemusta mutta rahalla olisi tarkoitus palkata esim. kesäkuukaudeksi nykyistä ylläpitoa täyspäiväiseen työhön, josta oli irkissä puhetta. Satasella nyt ei mitään tee mutta luulen että tuosta saisi selvästi enemmän.--[[Käyttäjä:Teppo|Teppo]] 25. toukokuuta 2007 kello 00.06 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Botti ==&lt;br /&gt;
Säädimme käyttöön [http://meta.wikimedia.org/wiki/Using_the_python_wikipediabot wikipediabotin], ja se tuntuu pelaavan hienosti. Botti toimii käyttäjätunnuksella [[Käyttäjä:Botti|Botti]] ([http://linux.fi/index.php/Toiminnot:Contributions/Botti Botin muokkaukset], eivät näy tuoreet muutokset -listassa). Eli nyt voidaan tarvittaessa ajella paljon työtä vaativia simppeleitä operaatioita! --[[Käyttäjä:Heikki|Heikki]] 25. maaliskuuta 2007 kello 16.47 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Miitti? ==&lt;br /&gt;
Irkissä heräsi keskustelua miitin järjestämisestä lähestyvien synttäreiden (2v) kunniaksi. Aiheesta tarkemmin sivulla [[Linux.fi:Miitti]]. --[[Käyttäjä:Heikki|Heikki]] 3. maaliskuuta 2007 kello 13:28:54 (EET)&lt;br /&gt;
&lt;br /&gt;
== Ohjegenerointityöpaja 9.5.2007? ==&lt;br /&gt;
Hei! Järjestän Linux -teemailtoja Helsingissä TKO-älyn ja FLUGin yhteisprojektina, ja tuli täällä fyysisen puolen kahvipöydässä puheeksi että kun uusille käyttäjille suunnatut illat ovat niin suosittuja, niin mitä jos pidettäisiin toukokuussa työpaja jossa pykätään suomenkielisiä ohjeita osallistujien mielestä tarpeellisten asioiden tekemiseen (tai jos ohjeet jo on mutta niitä ei vaan löytynyt, linkitetään). Sopisiko Linux-wikiä käyttää ohjegenerointialustana, ja jos niin olisiko tässä jotain valmistelua tarpeen - pitäisikö syntyvät tuotokset esim. merkitä jotenkin tietyllä tavalla Ohjeet-luokan lisäksi, ja onko jokin erityisen hieno ohjesivu josta voisi kehottaa osallistujia ottamaan mallia? --Sini Ruohomaa, etunimi.sukunimi iki.fi.&lt;br /&gt;
:Hyvä idea! Toki tänne saa ohjeita luoda, eikä niitä minusta tarvitse mitenkään ihmeemmin merkitä. Esimerkiksi Yhteenveto-laatikkoon tai keskustelusivulle voi kuitenkin kirjoittaa, mistä ohje on peräisin ihan vaan mielenkiinnon vuoksi. --[[Käyttäjä:Heikki|Heikki]] 20. helmikuuta 2007 kello 14:40:04 (EET)&lt;br /&gt;
:Mahtava homma tosiaan! Eikä välttämättä tarvitse kirjoittaa uusiakaan artikkeleita, vanhoja voi laajentaa, ajanmukaistaa tai korjata kielellisesti. Kielellistä hienosäätöä ym. voi tehdä vaikkei aiheesta varsinaisesti olisikaan tietotaitoa. --[[Käyttäjä:Maakuth|Maakuth]] 20. helmikuuta 2007 kello 18:27:52 (EET)&lt;br /&gt;
&lt;br /&gt;
== Luokitusremontti ==&lt;br /&gt;
Käykääs tarkistamassa [[Linux.fi:Luokitusremontti]] ja kommentoikaa. Ei viitsi rueta toteuttamaan noin laajaa muuttelua ilman muiden näkemyksiä. --[[Käyttäjä:Maakuth|Maakuth]] 27. joulukuuta 2006 kello 18:30:06 (EET)&lt;br /&gt;
&lt;br /&gt;
== Linkit kaupallisiin firmoihin ==&lt;br /&gt;
Miten pitäisi suhtautua siihen että wikissä on linkkejä kaupallisten firmojen sivuille ? &lt;br /&gt;
Ainakin käyttäjä 195.237.17.61 on aktiivisesti siivonnut näitä, mielestäni hyödyllisiä linkkejä pois. JukkaL&lt;br /&gt;
:Minusta kaupallisien firmojen sivuille voi linkittää jos ne liittyvät oleellisesti asiaan. Eli esimerkiksi artikkelissa [[Mistä Linux]] voi olla esimerkiksi tuo linkki Dataclubin sivuille. Mitään tarkkoja sääntöjä en linkkien suhteen kuitenkaan sanoisi, tapauskohtaisesti jokainen voi käyttää omaa harkintakykyään. --[[Käyttäjä:Heikki|Heikki]] 30. marraskuuta 2006 kello 21:50:47 (EET)&lt;br /&gt;
:Itsekin olisin semmoisella linjalla, että olkoot vaan jos niistä on lisäarvoa. Eri juttu on sitten pelkkä mainostaminen - linkkien työntäminen paikkoihin jonne ne eivät kuulu. Botnetithän tätä harrastavat. Mutta ei kaupallisuus mielestäni ole mikään varsinainen huono puoli jollekin linkille. Onhan täällä esim. artikkeli [[Linux-kannettavat]], joka muodostuu ihan pelkistä ostovinkeistä ja linkeistä kauppiaiden sivuille. --[[Käyttäjä:Maakuth|Maakuth]] 1. joulukuuta 2006 kello 12:47:47 (EET)&lt;br /&gt;
:En kyllä sanoisi että tuo käyttäjä on &amp;quot;aktiivisesti siivonnut&amp;quot;, yhdessä artikkelissa siirtänyt tietoja paikasta toiseen. --[[Käyttäjä:Maakuth|Maakuth]] 13. joulukuuta 2006 kello 23:29:12 (EET)&lt;br /&gt;
&lt;br /&gt;
== Päivitys etusivulla ==&lt;br /&gt;
Siirsin [[Etusivu2|Etusivu2:sta]] etusivulle uuden selkeämmän ryhmittelyn sisällöstä. Samalla toteutin Etusivun osat mallinteilla; etusivu säilyy edelleen suojattuna (se tuntuu olevan liian suosittu spämmäyskohde suojaamattomana), mutta nyt kuka tahansa voi silti muokkailla etusivun sisältöä muokkaamalla seuraavia sivuja:&lt;br /&gt;
*[[Malline:Perustietoa/etusivu]]&lt;br /&gt;
*[[Malline:Tervetuloa]]&lt;br /&gt;
*[[Malline:Aihealueet]]&lt;br /&gt;
*[[Malline:Yhteistyö/etusivu]]&lt;br /&gt;
*[[Malline:Linkkejä]]&lt;br /&gt;
--[[Käyttäjä:Heikki|Heikki]] 28. marraskuuta 2006 kello 17:11:35 (EET)&lt;br /&gt;
&lt;br /&gt;
== Siivoustoimenpiteitä ==&lt;br /&gt;
Tekniset ongelmat on saatu korjattua, joten nyt pitäisi saada noiden peelojen tuotokset siivottua. Siivosin nyt sellaista mitä osui eteen, mutta varmaan vielä jotain peelosivuja jäi vähintäänkin uudelleenohjauksiksi. Näistä voi ilmoitella irkissä tai vaikka listata tähän, niin saadaan kaikki siivottua. --[[Käyttäjä:Heikki|Heikki]] 23. lokakuuta 2006 kello 13:40:36 (EEST)&lt;br /&gt;
:Mahtavaa. Taas voidaan edetä wikin kehityksessä. --[[Käyttäjä:Maakuth|Maakuth]] 23. lokakuuta 2006 kello 18:42:34 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Teknisiä ongelmia ==&lt;br /&gt;
Pistänpä tänne tietoa, jotta ette ihmettele miksi ylläpitäjät eivät ole poistelemassa tuon teinipeelon luomia sivuja. Wikissä on meinaan nyt sellaisia ongelmia, että sivujen siirtämisessä ja poistamisessa tulee tietokantavirhettä. Tämä johtunee väliaikaisista ongelmista wikiä hostaavan Mpolin palvelimilla muutostöiden takia. Hommat saadaan varmaan kuntoon tässä piakkoin, ja saattaa olla että on palautettava joku varmuuskopio tietokannasta. --[[Käyttäjä:Heikki|Heikki]] 4. lokakuuta 2006 kello 07:01:22 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Jakeluihin perustuvia käyttäjäryhmiä? ==&lt;br /&gt;
Tuossa kun oman käyttäjäsivuni tein, niin tulin miettineeksi että jos tekaisisi käyttäjäluokkia (tai mallineita), siis jakeluihin perustuvia. Näkisi vähän että minkä järjestelmien käyttäjiä täältä oikein löytyy, ja onpa siitä ehkä jotain hyötyäkin, osaisi ehkä kysyä joitain distrokohtaisia tarkennuksia joistain pikkuasioista suoraan oikeilta käyttäjiltä. --[[Käyttäjä:JTS|JTS]] 20. syyskuuta 2006 kello 21:21:51 (EEST)&lt;br /&gt;
:Jos joku voista tekee pienet siistit mallinteet niin ei kai niistä erityistä haittaakaan olisi (eikä kyllä minusta mitään hyötyäkään) --[[Käyttäjä:Heikki|Heikki]] 20. syyskuuta 2006 kello 21:45:27 (EEST)&lt;br /&gt;
:Tämän tyyppisiähän on Wikipediassa, miksikäs noita ei voisi laittaa. Hyötypuoli on tietysti mahdollisesti hiukan minimaalinen, mutta ehkä jotain yhteisöllistä kehitystä voisi seurata. --[[Käyttäjä:Maakuth|Maakuth]] 25. lokakuuta 2006 kello 22:40:25 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Kuvakaappausten koko ==&lt;br /&gt;
Tästä tuli artikkelissa [[Kmail]] juttua. Eli kun ohjelmista kertoviin artikkeleihin laitetaan kuvakaappauksen pikkukuva, niin mikä koko kuvalle annetaan. Monessa kuvassa käytetään nyt 200px:ää, mutta joidenkin mielestä se on liian pieni ja 256:tta ehdotetaan.&lt;br /&gt;
Esimerkiksi artikkelissa [[Kmail]] kuvakoko on nyt 256px ja artikkelissa [[KDevelop]] 200px. Ehkäpä tuo 200 on turhan pieni, mutta viekö suurempi kuva sitten liikaa tilaa käytettäessä pienempiä resoluutioita? Minulla on ykkösnäytöllä resoluutiona 1280*1024, jossa tuo 256px on kyllä ihan sopivan kokoinen. Eli jonkinlainen yhtenäinen linja noihin pikkukuvien kokoon voitaisiin päättää. --[[Käyttäjä:Heikki|Heikki]] 25. elokuuta 2006 kello 23:20:07 (EEST)&lt;br /&gt;
:Lisäsin vertailun tuohon alle. Itsestä on vaikea uskoa että 256 on liian iso kellekään. Tilaa jää vielä 800 resoluutiollakin tarpeeksi tekstille. --[[Käyttäjä:JTS|JTS]] 25. elokuuta 2006 kello 23:56:40 (EEST)&lt;br /&gt;
&lt;br /&gt;
:Onko sillä loppuen lopuksi merkitystä saako pikkukuvasta selvää vai ei. Senhän voi joka tapauksessa klikata suuremmaksi hallutessaan --[[Käyttäjä:Rantarosvo|Rantarosvo]] 26. elokuuta 2006 kello 00:10:32 (EEST)&lt;br /&gt;
::Itse olen 200pxää suosinut. Samapa tuo kunhan itse kuva on 1:1 resoluutiolla tallenettu wikiin. --[[Käyttäjä:Maakuth|Maakuth]] 26. elokuuta 2006 kello 22:15:38 (EEST)&lt;br /&gt;
===Vertailu===&lt;br /&gt;
[[Kuva:Kmail.png|thumb|left|200px|Kuvakokona 200]]&lt;br /&gt;
[[Kuva:Kmail.png|thumb|left|256px|Kuvakokona 256]]&lt;br /&gt;
&amp;lt;hr style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kirjanmerkit/bookmarks ==&lt;br /&gt;
&lt;br /&gt;
Kirjanmerkin nimen tulisi olla ohjaava. &lt;br /&gt;
&lt;br /&gt;
Löysin nämä sivut MBNetistä linkillä &amp;quot;Linux-ohjeita suomeksi&amp;quot;.&lt;br /&gt;
Se olisi ollut erinomainen kirjanmerkin nimi. Linkki itse ehdotti&lt;br /&gt;
kirjanmerkiksi &amp;quot;Etusivu - Linux.fi&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Kuka etsii suomalaista Linuxia sanalla &amp;quot;etusivu&amp;quot;? Pelkkä &amp;quot;Linux.fi&amp;quot;&lt;br /&gt;
tai &amp;quot;Linux suomeksi&amp;quot; ohjaisivat paremmin. Sana &amp;quot;etusivu&amp;quot; on (lähes?)&lt;br /&gt;
tarpeeton.&lt;br /&gt;
&lt;br /&gt;
Lukirähjiöinen&lt;br /&gt;
Tuo otsikko on mediawikin ominaisuus, sama homma koskee wikipediaakin. Harvemminpa nettisivun otsikko varsinaisesti kertoo sen sisällöstä tuota tarkemmin. Kun menet jollekin muulle sivulle tässä wikissä tai wikipediassa niin huomaat että sivun nimi tulee tuolle samalle kohtaa (Linux.fi:Kahvihuone - Linux.fi). Mielestäni tämä käytänne on ihan hyvä. Mutta tervetuloa lukemaan ja kirjoittamaan! --[[Käyttäjä:Maakuth|Maakuth]] 22. elokuuta 2006 kello 11:03:26 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Kehitysidea ==&lt;br /&gt;
&#039;&#039;Siirretty sivulta [[Keskustelu:Etusivu]] --[[Käyttäjä:Heikki|Heikki]] 8. elokuuta 2006 kello 11:09:29 (EEST)&#039;&#039;&lt;br /&gt;
1. Tänne Linux.fi:hiin voisi pystyttää SMF-foorumin, koska täällä voisi olla tasokas ryhmä kasassa.&lt;br /&gt;
2. Etusivulle voisi lisätä Linuxuutiset.&lt;br /&gt;
3. Kun kerran on näin hyvä .fi domain on hukkaa tuhlata rahaa siihen, että täällä olisi vain Linuxwiki. Täällä voisi olla paljon muutakin Linuxiin liittyvää.&lt;br /&gt;
&lt;br /&gt;
:Pohtimisen arvoisia ideoita...&lt;br /&gt;
:2. Linux-uutisia tarjoavia suomalaisia sivustoja on jo jopa linkitettynä etusivulla, ja suhtaudun varauksella vähien resurssiemme kuluttamiseen uutisten kirjoittamiseen. Tietysti joku [http://fi.wikipedia.org Wikipedian] tyylinen &amp;quot;Ajankohtaista&amp;quot;-laatikko voisi toimia jossa olisi yhden rivin &amp;quot;uutisia&amp;quot; tyyliin &amp;quot;[[KDE]] 3.5.4 julkaistu&amp;quot;.&lt;br /&gt;
:1. Sama asia, kannattaako meidän lähteä kilpailemaan esim. [http://www.raja-antura.org Raja-anturan] tai sfnet.atk.linuxin kanssa? Suhtaudun varauksella, muiden mielipiteitä?&lt;br /&gt;
:3. Yleinen Linux-sivusto on joskus ollut suunnitteilla, esimerkiksi [[Linux.fi:Tietoa|Tietoa-sivulla]] luki aiemmin: &amp;quot; wiki.linux.fi on osa www.linux.fi sivustoa.&amp;quot;. Tämä projekti vaan taitaa olla kuollut. [[Käyttäjä:Teppo|Teppo]] ehkä osaisi sanoa tästä jotain.&lt;br /&gt;
:Ps. Allekirjoitetaan viestit (kirjoita viestisi perään &amp;lt;nowiki&amp;gt;--~~~~&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
:--[[Käyttäjä:Heikki|Heikki]] 8. elokuuta 2006 kello 11:09:29 (EEST)&lt;br /&gt;
&lt;br /&gt;
::Uutiset voidaankin jo toteuttaa täällä Wikin sisällä, jos niitä joku haluaa alkaa kirjoittamaan. Eli tehdä vain malline uutiset, joka sitten sisällytettäisiin etusivulle (kuten vaikka Wikipediassa on). --[[Käyttäjä:JTS|JTS]] 8. elokuuta 2006 kello 16:47:37 (EEST)&lt;br /&gt;
:::Jos jollakulla moiseen riittää aikaa ja viitseliäisyyttä, niin antakaa paukkua. Ylläpito päivittää etusivua sitten tarpeen mukaan. --[[Käyttäjä:Maakuth|Maakuth]] 9. elokuuta 2006 kello 02:24:51 (EEST)&lt;br /&gt;
:::Tein nyt tuon mallinteen: [[Malline:Uutiset]]. Jos sinne muodostuu jotain niin liitetään se etusivulle. --[[Käyttäjä:Heikki|Heikki]] 9. elokuuta 2006 kello 09:27:11 (EEST)&lt;br /&gt;
::::Olen joskus ajatellut, että  tällainen Linux.fi-niminen sivusto voisi toimia Linuxin &amp;quot;virallisena&amp;quot; suomalaisena kotisivuna, kuten se vissiinkin joskus muinoin toimikin (yritti toimia). Tällä meinaan, että sivuston tulisi tarjota aivan perinteisessä staattisessa muodossa lyhyt ja ytimekäs kuvaus siitä, mikä on Linux, kertoa kuinka sellainen asennetaan, sekä ylläpitää laajaa ja ajantasaista linkkiluetteloa suomenkielisistä Linux-sivustoista, -ohjeista ja -foorumeista (ja mahdollisesti myös muutamista tärkeimmistä kansainvälisistä). Lisäksi voisi tietysti olla kätevää, jos sivu pystyisi jollain tekniikalla (RSS?) kokoamaan keskeisien Linux-uutissivustojen annin samaan paikkaan. Tämä kaikki edellämainittu varmasti helpottaisi aloittelijoiden siirtymistä Linuxiin. Myös keskustelufoorumi voisi tulla kysymykseen, mutta sen täytyisi olla melko yleisluontoinen, koska eri jakeluilla on kuitenkin omat fooruminsa ja postituslistansa. Lähinnä kai sellainen voisi toimia tappelupaikkana siitä, mikä on paras distro, ja kenties tarjota aloittelijoille apua jakelun valintaan sun muuhun. --[[Käyttäjä:Teuvotohvelo|Teuvotohvelo]] 15. elokuuta 2006 kello 21:08:14 (EEST)&lt;br /&gt;
&lt;br /&gt;
Kyllä uutiset ja keskustelufoorumi ym. kaikki voidaan toteuttaa jos joku viitsii tuottaa sisältöä ja esim. niitä uutisia. Linkkilistakin kyllä kunhan löytyy ne linkit. Tervetuloa hommiin.--[[Käyttäjä:Teppo|Teppo]] 19. elokuuta 2006 kello 00:03:44 (EEST)&lt;br /&gt;
&lt;br /&gt;
Nyt kun toi keskustelufoorumi on toteutettu, kannattaisi laittaa linkki myös wikin etusivulta - olisin itsekin laittanut, mutta sivu taitaa olla lukittu. Kirjauduin keskustelufoorumiinkin nyt ihan sen takia, kun Ubuntu-foorumi on alhaalla, enkä kehdannut mennä OpenSusen foorumiin itkemään asiasta. Foorumiin taisi olla linkki Ubuntu-foorumissa, mutta vaikea oli foorumia löytää linux.fi:n etusivulta - vai onko mulla vain puusilmät. :D T: Peran&lt;br /&gt;
&lt;br /&gt;
== Kenen sivusto?==&lt;br /&gt;
Olisi mukavaa tietää, kuka tai ketkä tämän sivuston takana ovat. Sivujen alareunassa olevan linkin perusteella löytyvällä sivulla [[Linux.fi:Tietoja]] on kerrottu kyllä kuka domainnimen omistaa, mutta selailemalla en löytänyt sen enempää tietoa siitä, mitä Mpolin takaa löytyy. Projektina tämä suomenkielinen Linux-Wiki on valtavan hyvä. Linuxia saadaan toivottavasti tunnetummaksi tavallisen rahvaan joukossa tämän tyylisen työkalun avulla - ja eniten tietenkin tästä on varmaan apua aktiiviharrastajajoukolle itsellensä. Jos olisi tarkemmin tietoa siitä, minkälainen porukka tai organisaatio sivuston taustalla on, väki ehkä paremmin sitoutuisi sivustoon ja ehkäpä jopa paremmalla luottamuksella antaisivat osaamistaan ja aikaansa projektille. Taustaporukan tuntemus tuo luottamusta projektin jatkuvuudelle. -- [[Käyttäjä:Karppa|Karppa]] 9. helmikuuta 2006 kello 11:43:54 (EET)&lt;br /&gt;
:Mjoo, tämä omistajuustilanne ei ole itsellenikään kovin selkeä. Jossain määrin tämä on Flugin projekti (Flugin postituslistoilla oli tästä ennen perustamista keskustelua), mutta ei kai kovin virallisesti. Ainoa kunnon omistaja taitaa olla [[Käyttäjä:Teppo|Teppo]] joka hoitaa serveripuolen ylläpitoa. Ps. pistetään uudet keskustelut kahvihuoneen yläreunaan niin nähdään heti mitkä ovat uusimmat keskustelut ja jonkinlainen järjestys säilyy. --[[Käyttäjä:Heikki|Heikki]] 9. helmikuuta 2006 kello 13:58:41 (EET)&lt;br /&gt;
&lt;br /&gt;
::Loogistahan tuo lienee, uusin ylimmäisenä - enpä tullut ajatelleeksi (tai ajattelin vain asian jotenkin nurinkurisesti).&lt;br /&gt;
&lt;br /&gt;
::[[Käyttäjä:Teppo|Teppo]] ottanee kantaa tuohon omistajuus-asiaan. Lähinnä sivuston omistajuus kiinnostaa minua siinä mielessä, kuinka pitkään sivusto on käytettävissä. Kun taustalla ei ole selkeästi organisoitunutta instituutiota, ei sivuston jatkuvuutta voi taata. Toissalta, mikä instituutio nykyään pystyy minkään asian jatkuvuutta takaamaan sen enempää... Mutta ehkäpä olisi selkeämpää, jos esim. [http://www.flug.fi/ FlUGilla] olisi jotenkin selkeämpi rooli Wikin osalta. Ja toki joku esim. [http://www.debian.org/social_contract Debianin yhteisösopimuksen] kaltainen julistus saattaisi vakuuttaa. -- [[Käyttäjä:Karppa|Karppa]] 9. helmikuuta 2006 kello 14:35:18 (EET)&lt;br /&gt;
&lt;br /&gt;
Teppo selventää&lt;br /&gt;
&lt;br /&gt;
Mpoli Oy on siis Tepon firma joka tuottaa ja ylläpitää erilaisia palveluja pääosin internetissä. Tämä wiki ja muut linux.fi -domainin alla olevat palvelut ovat yksinkertaisesti Mpolin palveluja joita hallitaan valistuneen diktatuurin periaatteella.&lt;br /&gt;
Mpolilla ei ole ollut pitkään aikaan mitään tekemistä flug:n toiminnan kanssa. Flugin toimintaa tuettiin alussa mutta yhteistyö on loppunut jo vuosia takaperin.&lt;br /&gt;
Mpoli tukee mm. seuraavia sivustoja ja toimintaa:&lt;br /&gt;
&lt;br /&gt;
http://www.mikseri.net&lt;br /&gt;
http://www.puistoblues.fi&lt;br /&gt;
http://www.funk.fi&lt;br /&gt;
http://www.challenger.mpoli.fi&lt;br /&gt;
http://www.cruisingnight.tk/&lt;br /&gt;
&lt;br /&gt;
ja monia muita sponsorointikohteita.&lt;br /&gt;
&lt;br /&gt;
Mpolin omasta toiminnasta voi mainita mm. peliserverivuokrauksen http://www.nollapingi.net&lt;br /&gt;
Omat ja vieraat koneet laskien hostattavana ja ylläpidossa on noin 100 palvelinta joista yksi (1) on windows-pohjainen.&lt;br /&gt;
&lt;br /&gt;
Mpolin nimi periytyy muinaisesta harrastuksesta eli Metropoli BBS järjestelmästä.&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Keskustelu:Ndiswrapper&amp;diff=14504</id>
		<title>Keskustelu:Ndiswrapper</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Keskustelu:Ndiswrapper&amp;diff=14504"/>
		<updated>2007-04-05T18:55:23Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Olen käyttänyt sanaa ajuri lyhyyden vuoksi, mutta olisiko parempi käyttää sanakirjan sanaa laiteohjain?--[[Käyttäjä:Peran|Peran]] 3. huhtikuuta 2007 kello 02.32 (EEST)&lt;br /&gt;
:[http://www.lokalisointi.org/sanakirja/kaikki.html#e321 Lokalisointi.orgin sanakirja] tarjoaa myöskin käännökseksi sanaa &#039;&#039;ajuri&#039;&#039;, joka muutenkin on yleisesti käytössä, joten eiköhän se ole paras tässä yhteydessä. --[[Käyttäjä:Heikki|Heikki]] 3. huhtikuuta 2007 kello 11.22 (EEST)&lt;br /&gt;
::Oli näköjään jäänyt pois modprobeen kirjoittaminen.&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Ndiswrapper&amp;diff=14503</id>
		<title>Ndiswrapper</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Ndiswrapper&amp;diff=14503"/>
		<updated>2007-04-05T18:52:30Z</updated>

		<summary type="html">&lt;p&gt;Peran: Modprobeen kirjoittamisen lisäys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ndiswrapper on Linuxille toteutettu rajapinta Windowsin [[wlan|langattomien verkkokorttien]] ajureille. Ndiswrapperin avulla voidaan siis Linuxissa käyttää Windowsissa toimivia wlan-ajureita joidenkin wlan-korttien kanssa.&lt;br /&gt;
&lt;br /&gt;
=== Käyttö ===&lt;br /&gt;
[[Ohjelman asennus|Asenna]] ndiswrapper-paketti Linuxiisi ja lataa Windows-ajuri esim. [http://www.mbnet.fi/ajuriapaja/ Mbnetin ajuriapajalta]. Pura ajuri kotikansiossasi sopivaan alikansioon.&lt;br /&gt;
&lt;br /&gt;
Etsi Windows-ajurista &#039;&#039;.inf&#039;&#039;-tiedosto, ja asenna se ndiswrapperilla.&lt;br /&gt;
&lt;br /&gt;
Asentamiseen tarvitse [[Root|pääkäyttäjän]] oikeudet.&lt;br /&gt;
 ndiswrapper -i windowsajuri.inf&lt;br /&gt;
&lt;br /&gt;
[[Modprobe|Modprobeen]] pitää vielä kirjoittaa asetukset käskyllä:&lt;br /&gt;
 ndiswrapper -m&lt;br /&gt;
&lt;br /&gt;
Ndiswrapperilla Linuxiin asennetut Windows-ajurit näet komennolla:&lt;br /&gt;
 ndiswrapper -l&lt;br /&gt;
&lt;br /&gt;
Tämän jälkeen on otettava ajuri käyttöön ottamalla verkkolaite [[Verkkoliitynnät|uudelleen käyttöön]]. Lopullinen langattoman verkon käyttöönotto tapahtuu aivan [[WLAN|normaaliin tapaan]].&lt;br /&gt;
&lt;br /&gt;
=== Graafiset työkalut ===&lt;br /&gt;
[[Gnome]]en löytyy yksinkertainen graafinen työkalu ndiswrapperin käsittelyyn: [[ndisgtk]].&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Ajurit]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Keskustelu:Ndiswrapper&amp;diff=14462</id>
		<title>Keskustelu:Ndiswrapper</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Keskustelu:Ndiswrapper&amp;diff=14462"/>
		<updated>2007-04-02T23:32:16Z</updated>

		<summary type="html">&lt;p&gt;Peran: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Olen käyttänyt sanaa ajuri lyhyyden vuoksi, mutta olisiko parempi käyttää sanakirjan sanaa laiteohjain?--[[Käyttäjä:Peran|Peran]] 3. huhtikuuta 2007 kello 02.32 (EEST)&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Keskustelu:Wlan&amp;diff=14459</id>
		<title>Keskustelu:Wlan</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Keskustelu:Wlan&amp;diff=14459"/>
		<updated>2007-04-02T22:36:54Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ndiswrapper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Miten olis nyt lopulta tän artikkelin jakaminen useammalle sivulle? Rupee olemaan jo epäkäytännöllisen pitkä. Vaikkapa Uutiset/tietoturva/kortit/tukiasemat joihin olis linkit tältä sivulta? --[[Käyttäjä:Maakuth|Maakuth]] 7. elokuuta 2006 kello 12:41:44 (EEST)&lt;br /&gt;
:Juu, jakamista voisi tosiaan tehdä. --[[Käyttäjä:Heikki|Heikki]] 7. elokuuta 2006 kello 12:58:00 (EEST)&lt;br /&gt;
::Sinne meni. [[WLAN UKK]] -otsikkoon en ole täysin tyytyväinen, mutta &#039;&#039;Usein kysyttyjä kysymyksiä WLAN:sta&#039;&#039; voisi olla liian pitkä ;) --[[Käyttäjä:Maakuth|Maakuth]] 7. elokuuta 2006 kello 18:20:58 (EEST)&lt;br /&gt;
&lt;br /&gt;
Alkaa näyttää hyvältä.&lt;br /&gt;
&lt;br /&gt;
Jäsennys + oikolukuvaihe?&lt;br /&gt;
&lt;br /&gt;
== Ohjeita myös pulliaisille ==&lt;br /&gt;
&lt;br /&gt;
Olisi hienoa jos te LinuxGuruYliherrat ymmärtäisitte myös näitä windowspullamössö ihmisiä, jotka olisivat kyllä kiinnotuneita aloittamaan siirtymisensä Linux maailmaan. &lt;br /&gt;
&lt;br /&gt;
Elikkäs olisiko mahdollista saada aina kaikista ohjeistuksita sellaiset windowspullamössö versiotkin. :) Elikkä maahdollisimman paljon graaffisestia ja yksinkertaisesti.  &lt;br /&gt;
&lt;br /&gt;
Itselleni ei oikein meinaa tuon OpenWRT:n asennus lähtä kulkemaan. Kun alkuperäis firmwareen ei pääse kiinni telnet yhteydellä ja snapshot-20050202.tar.bz2 ei ole oikeata muotoa. Yritin siis Linksyssin webselain hallinta panelista: Administration - Firmware Upgrade - Browse - snapshot-20050202.tar.bz2.&lt;br /&gt;
&lt;br /&gt;
Haluaisin saada laitteisiini ohjelmisto paketin, joka tukee wds (Wireless Distribution System) toimintoa. Voisiko joku auttaa minua? Apu olisi erittäin tarpeellista.&lt;br /&gt;
&lt;br /&gt;
== JEP&lt;br /&gt;
&lt;br /&gt;
OpenWrt:ssä tulee dokumentaatio ja wiki, lue ne, olet tekemässä aivan väärällä tavalla.&lt;br /&gt;
&lt;br /&gt;
== Ralinkkiä:&lt;br /&gt;
&lt;br /&gt;
Ilmeisesti myös A-Link WL54PC on siirtynyt RT2561T-piiriin? Ainakin se näemmä toimii RT61-ajurilla, kieltämättä en kyllä edes kokeillut RT2500-ajuria kun PCI ID:n perusteella irkissä kaveri usutti juuri sen ajurin kimppuun. [[Käyttäjä:195.148.191.82|195.148.191.82]] 13. tammikuuta 2006 kello 11:45:37 (EET)&lt;br /&gt;
&lt;br /&gt;
 wget http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz&lt;br /&gt;
 tar zxvf rt2500-cvs-daily.tar.gz&lt;br /&gt;
 cd rt2500-cvs-20050518/&lt;br /&gt;
 cd Module/&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 cd /lib/modules/`uname -r`&lt;br /&gt;
 cd extra/&lt;br /&gt;
 mv rt2500.ko ../kernel/drivers/net/&lt;br /&gt;
 depmod -a&lt;br /&gt;
&lt;br /&gt;
 # ajurin lataus&lt;br /&gt;
&lt;br /&gt;
 modprobe rt2500&lt;br /&gt;
&lt;br /&gt;
 ifconfig ra0 up&lt;br /&gt;
&lt;br /&gt;
 # asetukset (wpa) profiiliin&lt;br /&gt;
 RaConfig2500&lt;br /&gt;
&lt;br /&gt;
 # dhcp:llä ylös&lt;br /&gt;
&lt;br /&gt;
 dhcpd ra0 / dhclient ra0 / pump -i ra0&lt;br /&gt;
&lt;br /&gt;
== Jargonista ==&lt;br /&gt;
&lt;br /&gt;
Oikoluin ja selkeytin jonkin verran jo salauksia koskevaa osuutta, mutta olisiko mahdollista erottaa pahimmat jargoniniput omille sivuilleen, tai peräti linkeiksi suomenkieliseen Wikipediaan? Sulkeisiin menevää englanninkielistä jargoninselitystä on nyt melkein yhtä paljon kuin itse asiaa. --[[Käyttäjä:82.181.25.86|82.181.25.86]] 28. kesäkuuta 2005 kello 15:17:09 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Hajautus? ==&lt;br /&gt;
&lt;br /&gt;
Alkaa olla jo niin pitkä sivu, että tuosta ei meinaa saada tolkkua. Pitäisikö hajautella vähän? --[[Käyttäjä:Maakuth|Maakuth]] 4. syyskuuta 2005 kello 17:51:08 (EEST)&lt;br /&gt;
:Parempi jäsentely (otsikointi) saattaisi riittää vielä hetken, helpottaa myös sivun pilkkomista myöhemmin. — [[Käyttäjä:Nike|Nike]] 5. syyskuuta 2005 kello 10:03:11 (EEST)&lt;br /&gt;
:Alkaa mennä jo mahdottoman pitkäksi... Pitäisi varmaan rueta sitä hajauttamista harkitsemaan. Jäsentely vaikuttaa aika kiitettävältä, tätä artikkelia onkin työstetty varmasti eniten. --[[Käyttäjä:Maakuth|Maakuth]] 25. lokakuuta 2005 kello 20:50:17 (EEST)&lt;br /&gt;
&lt;br /&gt;
== USB? ==&lt;br /&gt;
&lt;br /&gt;
Mielestäni tästä artikkelista puuttuu kokonaan usb-wlan osuus. Olisi hienoa tietää mitkä usb-paikkaiset wlan-sovittimet toimivat linuxissa ja mitkä eivät.--[[Käyttäjä:213.216.219.118|213.216.219.118]] 5. syyskuuta 2005 kello 22:21:58 (EEST)&lt;br /&gt;
&lt;br /&gt;
Sille nyt ainakin voisi perustaa erillisen sivun. Ja allekirjotelkaahan, sille löytyy näppärä nappi tuosta työkalupalkista, niin näkyy heti kuka on kirjoittanut mitäkin. --[[Käyttäjä:Maakuth|Maakuth]] 5. syyskuuta 2005 kello 20:28:01 (EEST)&lt;br /&gt;
&lt;br /&gt;
Hm. USB-liityntäisiä ei paljoa taida olla, sellaisia jotka toimisivat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RT2500-korttien kantamia? ==&lt;br /&gt;
Voitteko kertoa kokemuksia millä rt2500-piirisarjan korteilla on hyvä kantama. Nyt näin viikon olen kokeillut A-linkin korttia ja siinä ei ole niin hyvä kantama kuin toivoisi. Ei kyllä välttämättä kuulu suoraan tämän sivun artikkelin alle. Pitäisiköhän rt2500:lle perustaa oma artikkeli.&lt;br /&gt;
--[[Käyttäjä:82.128.202.208|82.128.202.208]] 19. syyskuuta 2005 kello 19:02:03 (EEST)&lt;br /&gt;
&lt;br /&gt;
No joo. Kantavuus riippuu aika paljon monesta asiasta. Myös tukiasemasta ja heijastuksista.&lt;br /&gt;
--[[Käyttäjä:62.142.174.107|62.142.174.107]] 19. syyskuuta 2005 kello 21:24:47 (EEST)&lt;br /&gt;
&lt;br /&gt;
Minulla on kanssa sama kokemus, että ralinkit (usb ja pci-kortit testettu) eivät kanna mihinkään. Kannettavat (atheros toisessa ja ipw2200 toisessa) ja nokia 770 toimivat moitteetta kaikkialla, jopa pihalla, mutta ralinkillä varustettu työasema pätkii vaikka tukiasema on viiden metrin päässä.. Lisäksi ralink ei näe skannamalla naapureiden tukiasemia. Oma tukiasema on wrt54g Mielestäni tämä sivusto antaa liian valoisan kuvan rt2500/rt2570 piireistä.&lt;br /&gt;
--[[Käyttäjä:62.236.91.3|62.236.91.3]] 3. tammikuuta 2006 kello 11:15:03 (EET)&lt;br /&gt;
&lt;br /&gt;
== RT2500-korttien kanavat ==&lt;br /&gt;
Omalla lähialueella on joitain langattomia tukiasemia, jotka käyttävät kanavia 12 tai 13. Itse en pääse näitä jostain syystä käyttämään, vaikka kortin pitäisi tukea niitä. Voi kuulemma johtua maa-asetuksista. Mistä voi vaihtaa näitä asetuksia? Ainakaan GUI:ssa ei ollu mitään siihen viittaavaa ja Ad-hoc menetelmällä näkyi kanavia vain 11:sta asti.&lt;br /&gt;
&lt;br /&gt;
Edit: Paikansin maa-asetuksen jo itse:&lt;br /&gt;
/etc/Wireless/RT2500STA/RT2500STA.dat&lt;br /&gt;
Siellä CountryRegion=2 vastaa Suomen oloja&lt;br /&gt;
&lt;br /&gt;
--[[Käyttäjä:82.128.202.206|82.128.202.206]] 20. syyskuuta 2005 kello 19:13:21 (EEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== wpa_supplicant ==&lt;br /&gt;
&lt;br /&gt;
On hankala saada wpa-tukea sen kanssa käyttöön, haluaako joku kirjoittaa ohjeen?&lt;br /&gt;
&lt;br /&gt;
== Älä ole epäitsekäs ==&lt;br /&gt;
&lt;br /&gt;
Alhaalla on laatikoituna tekstiä lahjoituksista ym.&lt;br /&gt;
&lt;br /&gt;
Siellä oli myös virke &amp;quot;Älä ole epäitsekäs&amp;quot;.&lt;br /&gt;
Mitä tuo tarkoittaa?&lt;br /&gt;
&amp;quot;Ole itsekäs&amp;quot;?&lt;br /&gt;
Tuskin tuollainen ajattelu lisää lahjoituksia tai osallistumista.&lt;br /&gt;
&lt;br /&gt;
==Miksi kaikki aina väännetään Suomeksi? ==&lt;br /&gt;
&lt;br /&gt;
Yleisesti: Miksi tässäkin Wikissä kaikki yritetään vääntää väkisin Suomeksi, esim. kernel, stack, + monet muut. Monet näistä Englanninkielisistä nimityksistä ovat kuitenkin alan vakiintunutta sanastoa. Se että, esim. stack käännetään pinoksi sillä perusteella, että joku ei tiedä mikä stack on, ei hän varmaan yhtään paremmin tiedä mikä pino on (siis atk mielessä). [[Käyttäjä:Luser|Luser]] 22. tammikuuta 2006 kello 13:57:08 (EET)&lt;br /&gt;
&lt;br /&gt;
:Toisaalta termi ydin kertoo kyllä englantia osaamattomalle paljon enemmän kuin kernel tai kerneli. Sama pätee myös vaikkapa sanoihin suoritin (processor), selain (browser), jakelu/jakelupaketti (distribution) tai komentotulkki (shell). Sitäpaitsi, ajattelepa tilannetta, jossa minkään erikoisalan sanastoa ei olisi käännetty suomeksi. Esimerkiksi jos lääketieteen ja biologian termistö olisi vain latinaksi, voisi tavallisen pulliaisen sairaalakäynnistä tulla sangen ahdistava kokemus tai tavallisen ihmisen kasviharrastuksen aloittamisesta tulla melkoisen vaikeaa.  --[[Käyttäjä:Pb|Pb]] 22. tammikuuta 2006 kello 18:04:00 (EET)&lt;br /&gt;
&lt;br /&gt;
:Pino on aivan vakiintunut sana, sen sijaan sanaa stac [sic] ei ole olemassakaan. Sivusto on kuitenkin käsittääkseni suunnattu aloittelijoille, joten kunnon suomennosten vakiinnuttaminen &#039;&#039;&#039;yleiskieleen&#039;&#039;&#039; on meidän vastuulla. Ammattilaisilla ja harrastajilla on oma slangi, mutta se ei kuulu kansan suuhun. — [[Käyttäjä:Nike|Nike]] 22. tammikuuta 2006 kello 22:41:15 (EET)&lt;br /&gt;
&lt;br /&gt;
::Tyrmäsit kritiikkini 101% ...eli jatketaan samaan malliin kaikki Suomeksi. Se oli muuten stack. Laittaisit energiasi mielummin asiavirheiden korjaamiseen suomentamisvimman sijaan. Oikeinkirjoitusta jne. korjaa nyt kuka tahansa, mutta asiavirheet on jo pahempi juttu.[[Käyttäjä:Luser|Luser]] 23. tammikuuta 2006 kello 00:10:22 (EET)&lt;br /&gt;
:::Oikeinkirjoituksesta puheen ollen, kielten nimet kuuluu aina kirjoittaa pienellä (esim. ilmaisut suomen kieli, norjaksi, bahasa indonesia, käännös ruotsiksi ym). --[[Käyttäjä:Pb|Pb]] 23. tammikuuta 2006 kello 22:36:11 (EET)&lt;br /&gt;
&lt;br /&gt;
:::: OK, minua kuitenkin alkaa ahdistaa tämä suomettuminen, olen ehkä liikaa lukenut englanninkielisiä tekstejä. Sama pätee esim. wintoosaan, olen aina käyttänyt englanninkielistä versioata ja suomenkileinen tuntuu tosi oudolta enkä ymmärrä siinä aina sanojen merkitystä. Mutta päästäänkö tässä kompromissiin niin, että laitetaan suomeksi ja se mahdollinen englaninkielinen termi sulkuihin eli esim. pino (&#039;&#039;engl. stack&#039;&#039;) ? Klassikko muuten lienee tällä saralla heittovaihtotiedosto (&#039;&#039;engl. swap&#039;&#039;)? [[Käyttäjä:Luser|Luser]] 28. tammikuuta 2006 kello 20:13:30 (EET)&lt;br /&gt;
&lt;br /&gt;
::::: Itselläni ei ole mitään tuollaista menettelyä vastaan. Se voisi tosiaan olla hyvä ratkaisu varsinkin kun pitempään Linuxin kanssa puuhastelleet ovat kuitenkin tottuneet käyttämään juuri englanninkielisiä termejä. --[[Käyttäjä:Maakuth|Maakuth]] 28. tammikuuta 2006 kello 20:24:54 (EET)&lt;br /&gt;
&lt;br /&gt;
::::::Samaa mieltä. Vaikka varsinaisessa lokalisointityössä tuo onkin aivan väärä periaate, niin tällaiseen ja tämän kohderyhmäiseen wikiin se sopii oikein hyvin. --[[Käyttäjä:Pb|Pb]] 28. tammikuuta 2006 kello 22:07:27 (EET)&lt;br /&gt;
&lt;br /&gt;
:::::::Samaa meiltä olen minäkin. Pistin [[Linux.fi:Merkitsemiskäytäntöjä|merkitsemiskäytäntöihin]] maininnan (lukeekohan sitä kukaa? :). --[[Käyttäjä:Heikki|Heikki]] 29. tammikuuta 2006 kello 00:38:11 (EET)&lt;br /&gt;
&lt;br /&gt;
::::::::&amp;quot;Oikeinkirjoitusta jne. korjaa nyt kuka tahansa...&amp;quot; Näin kohtalaisen laajan empiirisen aineiston pohjalta väittäisin, että asia ei nyt aivan niin ole. Korjailin alkupuolen räikeimmät kielioppivirheet. [[Käyttäjä:81.175.195.69|81.175.195.69]] 17. heinäkuuta 2006 kello 12:15:06 (EEST)&lt;br /&gt;
&lt;br /&gt;
== Ndiswrapper ==&lt;br /&gt;
&lt;br /&gt;
ndiswrapper on ohjattu (ihan oikeaoppisesti) WLAN-sivulle, mutta sivulla ei ole mainintaa koko asiasta.&lt;br /&gt;
&lt;br /&gt;
Ajattelin sen sopivan otsikon &amp;quot;&#039;&#039;WLAN ja Linux&#039;&#039;&amp;quot;-alle, mutta en ole keksinyt aasinsiltaa ko. aiheelle. Lisäksi voisi olla  ohjeet ndiswrapperin Windows-ajurin asentamisesta. Lisäksi tämä on ensimmäinen uusi-viestini wikiin.&lt;br /&gt;
:No eihän tuo verbaalinen nerokkuus oo täällä mikään primäärinen juttu, jos sinulla on aiheesta tietoa ja saat sen jotenkin kirjoiteltua niin joku voi keksiä siihen aasinsillan sitten jälkikäteen. --[[Käyttäjä:Maakuth|Maakuth]] 12. helmikuuta 2007 kello 17:56:49 (EET)&lt;br /&gt;
::Noh ny sitten on raapustettu ensimmäinen wikitys, pääsivulle sen takaisin, joille ei kelpaa, niin saavat sitten korjailla. --[[Käyttäjä:Peran|Peran]] 3. huhtikuuta 2007 kello 00.56 (EEST)&lt;br /&gt;
::No siitä taisi tulla ihan erityyppinen kuin muut Linux.fi:n ohjeet, mutta jolle ei kelpaa, niin korjatkoon. --[[Käyttäjä:Peran|Peran]] 3. huhtikuuta 2007 kello 01.36 (EEST)&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=WLAN&amp;diff=14458</id>
		<title>WLAN</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=WLAN&amp;diff=14458"/>
		<updated>2007-04-02T22:33:39Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Wlan ja Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kuva:Asus-ibm-wmaker-teippi.jpg|200px|thumb|WLAN-sovitin jälkiasennettuna kannettavaan tietokoneeseen. Kuvassa myös [[Window Maker]] -[[ikkunointiohjelma]]]]&lt;br /&gt;
==Wlan ja Linux==&lt;br /&gt;
&lt;br /&gt;
Wlan-korttien tuki ei ole Linuxissa yhtä kattavaa kuin Windows-maailmassa. Tämä johtuu pelkästään piirivalmistajien haluttomuudesta julkaista koodia/rajapintoja/tietoa laitteistosta kehittäjille. Piirivalmistajista ehkä Conexant ja Broadcom ovat kaikkein tunnetuimpia tässä kyseenalaisessa puuhassa. Osittaista helpotusta tähän ongelmaan tuo [[ndiswrapper]], jonka avulla joitakin wlan-kortteja voi käyttää Linuxissa Windows-ajurin avulla.&lt;br /&gt;
&lt;br /&gt;
Kaikki Wlan-kortit eivät siis toimi Linuxissa. Muutoksia on tapahtunut, ja Linuxin Wlan-tuki parani tai ajurikehitys ainakin helpottui jonkin verran yhtenäisen wlan-rajapinnan käyttöönoton myötä. Yhtenäistä 802.11 wlan-rajapintaa (802.11 stack) kehitettiin Jeff Garzikin johdolla ja se tuli ensimmäistä kertaa käyttöön 2.6.14 kernelissä.&lt;br /&gt;
&lt;br /&gt;
Toisaalta Linuxin ajurit tarjoavat monia sellaisia ominaisuuksia, joita Windows-versioissa ei ole. Linux/WLAN -rintaman ajankohtaisia tapahtumia voi seurata sivulta [[WLAN-uutisia]].&lt;br /&gt;
&lt;br /&gt;
==Langattoman verkon käyttökohteita==&lt;br /&gt;
&lt;br /&gt;
Langaton verkko sopii loistavasti joka kodin verkoksi, koska verkkokaapelointia ei tarvita. Jos sattuu omistamaan kannettavan, Internetin käyttö onnistuu langattomasti lähes joka paikasta asunnossa tai jopa ulkoa, (oman) tukiaseman kautta. Taloyhtiöissä ja kommuuneissa nettiyhteyttä myös voidaan helposti jakaa langattomasti. Yksi tukiasema kantaa normaalisti esteettömissä olosuhteissa noin 150-200 metriä. &lt;br /&gt;
&lt;br /&gt;
Langaton verkkoyhteys on kätevä myös hotelleissa, joihin yhteyksiä tarjoaa muun muassa [http://www.sonera.fi/homerun Sonera Homerun] sekä [http://www.dnafinland.fi/yrityksille/liittymat_ja_palvelut/wlan/ dna WLAN]. Tämä on verkko jossa ei ole salausta, mutta tunnistautuminen (eng. authentication) vaaditaan yhteyden käyttämiseen. Päivän yhteysaikakortti maksaa noin 15 € ja kuukauden noin 80 €. Tämä yhteystapa on kätevä jos matkustelee paljon. &lt;br /&gt;
&lt;br /&gt;
* [http://www.homerun.telia.com/eng/coverage/ Sonera Homerun -palvelualuekartta].&lt;br /&gt;
* [http://www.dnafinland.fi/yrityksille/liittymat_ja_palvelut/wlan/toiminta-alueet_suomi.shtml dna WLAN -palvelualueet].&lt;br /&gt;
&lt;br /&gt;
Toinen laaja WLAN-verkkototeutus on [http://www.sparknet.fi/ SparkNet]. Sen kantamalla asuu huomattava osa Suomen asukkaista.&lt;br /&gt;
&lt;br /&gt;
* [http://maps.sparknet.fi/ SparkNet palvelualuekartta]&lt;br /&gt;
&lt;br /&gt;
Avoimia Wlan-pisteitä on myös muulla tarjolla, joskus avoimia verkkoja on myös kotikäyttäjillä tahallisesti tai osaamattomuuden takia. Kannattaa huomioida, että toisten suojattujen (WEP, WPA) verkkoyhteyksien luvaton käyttäminen on rikos.&lt;br /&gt;
&lt;br /&gt;
== Osallistu ==&lt;br /&gt;
&lt;br /&gt;
Voit tukea kehitystyötä, ensisijaisesti &#039;&#039;&#039;osallistumalla itse kehitystyöhön&#039;&#039;&#039; (koodaus, dokumentointi, jne.). Toissijaisesti voit myös lahjoittaa kehittäjille wlan-kortteja, tarvittavaa laitteistoa tai tukemalla kehitystä rahallisesti. Voit myös käyttää aikaasi raportoimalla virheistä tai neuvoa muita ihmisiä.&lt;br /&gt;
&lt;br /&gt;
== Katso myös ==&lt;br /&gt;
*[[Langattoman verkon tietoturva]]&lt;br /&gt;
*[[Langattomat verkkolaitteet]]&lt;br /&gt;
*[[WLAN-tukiasemat]]&lt;br /&gt;
*[[WLAN UKK|Usein kysyttyjä kysymyksiä Linuxista ja WLAN:sta]]&lt;br /&gt;
*[[Verkkoliitynnät]]&lt;br /&gt;
*[[Verkkoliitynnät monimutkaisemmin]]&lt;br /&gt;
&lt;br /&gt;
[[Luokka:Verkko]]&lt;br /&gt;
[[Luokka:Ajurit]]&lt;br /&gt;
[[Luokka:Ohjeet]]&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
	<entry>
		<id>https://www.linux.fi/w/index.php?title=Ndiswrapper&amp;diff=14457</id>
		<title>Ndiswrapper</title>
		<link rel="alternate" type="text/html" href="https://www.linux.fi/w/index.php?title=Ndiswrapper&amp;diff=14457"/>
		<updated>2007-04-02T22:31:01Z</updated>

		<summary type="html">&lt;p&gt;Peran: /* Ndiswrapper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ndiswrapper on Linuxin rajapinta Windows:n langattomien verkkorttien ajureille. Ndiswrapper:n avulla voidaan siis Linuxissa käyttää Windowsin langattomia ajureita joissakin wlan-korteissa.&lt;br /&gt;
&lt;br /&gt;
=== Käyttö ===&lt;br /&gt;
Asenna ndiswrapper paketti Linuxiisi, ja lataa Windows-ajuri esim. [http://www.mbnet.fi/ajuriapaja/ Mbnetin ajuriapajasta], ja pura se kotikansiossasi sopivaan alikansioon.&lt;br /&gt;
&lt;br /&gt;
Etsi windows-ajurista .inf-tiedosto, ja asenna ndiswrapperilla wlan.&lt;br /&gt;
&lt;br /&gt;
Asentamiseen tarvinnet root-oikeudet.&lt;br /&gt;
 ndiswrapper -i windowsajuri.inf&lt;br /&gt;
&lt;br /&gt;
Ndiswrapperilla Linuxiin asennetut windows-ajurit näet:&lt;br /&gt;
 ndiswrapper -l&lt;br /&gt;
&lt;br /&gt;
Ilmeisesti tarvitsee verkon uudelleen käynnistämisen, jotta kortti tulee voimaan.&lt;br /&gt;
&lt;br /&gt;
Lopullinen käyttöönasentaminen tapahtuu samoin kuin normaalillakin [[WLAN]]:lla.&lt;br /&gt;
&lt;br /&gt;
=== Graafiset työkalut ===&lt;br /&gt;
Gnomeen löytyy yksinkertainen graafinen työkalu ndiswrapperin käsittelyyn:&#039;&#039;&#039;ndisgtk&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Peran</name></author>
	</entry>
</feed>