Ero sivun ”CMake syvemmin” versioiden välillä

Siirry navigaatioon Siirry hakuun
Peran (keskustelu | muokkaukset)
Peran (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Rivi 1: Rivi 1:
{{ Ohjelma | nimi=CMake  | kuva= |  kuvateksti= | lisenssi=cmake | käyttöliittymä=teksti | kotisivu=[http://cmake.org cmake.org] }}
{{ 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] }}


=CMaken käytön kuvaus=
=CMaken käytön kuvaus=
Rivi 695: Rivi 695:
cpack -G RPM
cpack -G RPM
</syntaxhighlight>
</syntaxhighlight>
== Debian-paketin luominen riippuvuuksien kanssa ==
Aluksi luodaan projektille lisenssin sisältävän tiedoston (LICENSE) lisenssitieksti ja README.md-tiedosto. Ne tiedostot listään projektin juureen.
<syntaxhighlight lang=bash>
touch LICENSE
touch README.md
</syntaxhighlight>
Lisäksi luomme uuden tiedoston: Packing.cmake, projektin cmake-alikansioon:
<syntaxhighlight lang=bash>
touch cmake/Packing.cmake
</syntaxhighlight>
Tähän sisällöksi:
(Huom! kts. lähde: https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/#what-is-needed-to-enable-packing )
<syntaxhighlight lang=Cmake line>
# -----------------------------------------------
# |                          OSUUS CPACK:IA VARTEN
# | Osuus kopioitu pitkälti:
# |  https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/
#
# Tarvittavat lisäykset Debian pakkausta ja normaalia pakkausta varten...
# Tähän on haettu/käännetty apuja https://karthikkalyanaraman.medium.com/creating-debian-packages-cmake-e519a0186e87
# ja varsinkin https://decovar.dev/blog/2021/09/23/cmake-cpack-package-deb-apt/
# Tästä on tiputettu pois oman apt-pakettilähteiden perustamisen osuus.
# Aluksi määritellään CPACK:lle vietävät muuttujat set-käskyillä.
set(CPACK_PACKAGE_NAME ${PROJECT_NAME}
    CACHE STRING "The resulting package name"
)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION}
    CACHE STRING "Package description for the package metadata"
)
set(CPACK_PACKAGE_VENDOR "Joku Yritys")
set(CPACK_VERBATIM_VARIABLES YES)
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages")
# https://unix.stackexchange.com/a/11552/254512
#set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/some")#/${CMAKE_PROJECT_VERSION}")
# Tämä kommentoitiin, jotta paketti asennetaan
# oikeisiin hakemistoihin eikä:
# /opt/some-alikansioon.
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_CONTACT "YOUR@E-MAIL.net")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "YOUR NAME")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
# package name for deb. If set, then instead of
# some-application-0.9.2-Linux.deb
# you'll get some-application_0.9.2_amd64.deb
# (note the underscores too)
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
# that is if you want every group to have its own package,
# although the same will happen if this is not set
# (so it defaults to ONE_PER_GROUP)
# and CPACK_DEB_COMPONENT_INSTALL is set to YES
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) #ONE_PER_GROUP)
# without this you won't be able to pack only specified component
set(CPACK_DEB_COMPONENT_INSTALL YES)
set( CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ  GROUP_EXECUTE
    WORLD_READ WORLD_EXECUTE
)
#Määritellään debian-paketin riippuvuudet.
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.7-18), libboost-all-dev (>= 1.83)")
#Määritellään riippuvuudet automaattisesti !!!
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES)
#Määritellään rpm-paketin riippuvuudet.
#set(CPACK_RPM_PACKAGE_REQUIRES "libboost_date_time_legacy >= 1.65")
set(CPACK_RPM_PACKAGE_REQUIRES "libboost_date_time_legacy >= 1.65")
set(CPACK_RPM_PACKAGE_AUTOREQ YES)
</syntaxhighlight>
Tässä siis kirjoitetiin cpack-ohjelmalle tarvitsemansa muuttujien arvot.
Lisää vielä include -rivi projektin juuren CMakeLists.txt-tiedoston loppupuolelle ennen include(CPack)-käskyä:
<syntaxhighlight lang=Cmake line start=44>
include ("cmake/Packing.cmake")
</syntaxhighlight>
Tiedosto CMakeLists.txt-tiedosto näyttää tältä:
<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)
# CPACK:n tarvitsemat käskyt
install(TARGETS hello )
# Deb-paketin ylläpitäjä eli paketin tekijä.
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Peran")
# Rpm-paketin myyjä. Laitoin samaksi, kuin Debian-paketin ylläpitäjä.
set(CPACK_RPM_PACKAGE_VENDOR ${CPACK_DEBIAN_PACKAGE_MAINTAINER})
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include("cmake/Packing.cmake")
include(CPack)
</syntaxhighlight>


==Käyttö==
==Käyttö==