Ero sivun ”CMake syvemmin” versioiden välillä

Siirry navigaatioon Siirry hakuun
3 886 merkkiä lisätty ,  11. joulukuuta 2024
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>


54

muokkausta

Navigointivalikko