Ero sivun ”CMake syvemmin” versioiden välillä
Siirry navigaatioon
Siirry hakuun
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa |
Ei muokkausyhteenvetoa |
||
Rivi 511: | Rivi 511: | ||
├── config.h | ├── config.h | ||
└── hello.cpp | └── hello.cpp | ||
</syntaxhighlight> | |||
== Ulkoisen kirjaston käyttäminen == | |||
Ulkoisena testikirjastona käytämme boost-kirjastoa. | |||
=== Boost-kirjaston asentaminen Debian-pohjaisissa ympäristöissä === | |||
Ohjelman asennus tapahtuu yksinkertaisesti päätteellä: | |||
<syntaxhighlight lang=bash> | |||
sudo apt install libboost-all-dev | |||
</syntaxhighlight> | |||
(Muiden ympäristöjen käyttäjät tietänevät asennuskäskyn minua paremmin, joten en niitä ala arvuuttelemaan.) | |||
=== CMakeLists.txt:n muutokset Boost-kirjaston käyttöön === | |||
Muokkaamme CMakeLists.txt-tiedoston riviä: | |||
<syntaxhighlight lang=bash line Start=28 > | |||
target_link_libraries(hello mylib boost_date_time) | |||
</syntaxhighlight> | |||
Lisäämme find_package(boost_date_time REQUIRED) rivin message-rivien perään. | |||
<syntaxhighlight lang=bash line start=20 > | |||
find_package(boost_date_time REQUIRED) | |||
</syntaxhighlight> | |||
joten CMakeLists.txt-tiedosto on kokonaisuudessaan seuraavan näköinen: | |||
<syntaxhighlight lang=cmake line > | |||
cmake_minimum_required(VERSION 3.21) | |||
project( | |||
"eka-projekti" | |||
VERSION 0.1.0.2 | |||
DESCRIPTION "Ensimmainen cmake-projektini" | |||
HOMEPAGE_URL "https://linux.fi" | |||
LANGUAGES "C" "CXX" | |||
) | |||
message("${PROJECT_NAME} on ensimmäinen projektimme, ja tässä on sen tiedot:") | |||
message("Projektin versio on ${PROJECT_VERSION}") | |||
message("Se koostuu neljästä osasta:") | |||
message(${PROJECT_VERSION_MAJOR}) | |||
message(${PROJECT_VERSION_MINOR}) | |||
message(${PROJECT_VERSION_PATCH}) | |||
message(${PROJECT_VERSION_TWEAK}) | |||
message("Projektimme kuvaus on:${PROJECT_DESCRIPTION}") | |||
message("Kotisivuksi olemme määritelleet tutun ${PROJECT_HOMEPAGE_URL}.") | |||
find_package(boost_date_time REQUIRED) | |||
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_SOURCE_DIR}/src/config.h) | |||
add_library(mylib lib/mylib.cpp) | |||
target_include_directories(mylib PUBLIC include) | |||
add_executable("hello" "src/hello.cpp") | |||
target_link_libraries(hello mylib boost_date_time) | |||
</syntaxhighlight> | |||
=== Projektiin lisättävät rivit === | |||
Pääohjelmaan src/hello.cpp on lisättävä include rivi: | |||
<syntaxhighlight lang=c++ line start=4 > | |||
#include <boost/date_time/posix_time/posix_time.hpp> | |||
</syntaxhighlight> | |||
ja ajan tulostamisrivit ohjelman loppupuolelle: | |||
<syntaxhighlight lang=c++ line Start=21> | |||
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time(); | |||
std::cout << "Aika on " << time << "\n"; | |||
</syntaxhighlight> | |||
Tämän jälkeen src/hello.cpp-tiedoston pitäisi näyttää tältä: | |||
<syntaxhighlight lang=c++ line> | |||
#include <iostream> | |||
#include "config.h" | |||
#include <mylib.h> | |||
#include <boost/date_time/posix_time/posix_time.hpp> | |||
int main(int args,char **argv) { | |||
std::cout << "ohjelman ajotiedoston nimi hakemistopolkuineen on " << argv[0] << "\n"; | |||
std::cout << PROJECT; | |||
std::cout << "\n" << PROJECT_VERSION ; | |||
std::cout << "\n" << PROJECT_VERSION_MAJOR ; | |||
std::cout << "\n" << PROJECT_VERSION_MINOR; | |||
std::cout << "\n" << PROJECT_VERSION_PATCH; | |||
std::cout << "\n" << PROJECT_VERSION_TWEAK; | |||
std::cout << "\n" << PROJECT_HOMEPAGE_URL; | |||
std::cout << "\n" << PROJECT_DESCRIPTION; | |||
std::cout << "\n" << multiply(3,5); | |||
if(args>2) { | |||
std::cout << "\n" << multiply(atof(argv[1]),atof(argv[2])); | |||
} | |||
std::cout << "\n"; | |||
boost::posix_time::ptime time = boost::posix_time::second_clock::local_time(); | |||
std::cout << "Aika on " << time << "\n"; | |||
return 0; | |||
} | |||
</syntaxhighlight> | |||
=== Ohjelman kääntäminen ja koeajaminen === | |||
Ohjelma käännetään tuttuun tapaan projektin juurikansiosta seuraavalla tutulla käskysarjalla: | |||
<syntaxhighlight lang=bash> | |||
mkdir build | |||
cd build | |||
rm -r * | |||
cmake .. | |||
make all | |||
</syntaxhighlight> | |||
Ohjelma ajetaan tutulla käskyllä: | |||
<syntaxhighlight lang=bash> | |||
./hello | |||
</syntaxhighlight> | |||
Käsky tulostaa jotain seuraavaa... | |||
<syntaxhighlight lang=bash> | |||
eka-projekti | |||
0.1.0.2 | |||
0 | |||
1 | |||
0 | |||
2 | |||
https://linux.fi | |||
Ensimmainen cmake-projektini | |||
15 | |||
Aika on 2024-Dec-04 20:10:41 | |||
</syntaxhighlight> | </syntaxhighlight> | ||