Ero sivun ”CMake syvemmin” versioiden välillä
Siirry navigaatioon
Siirry hakuun
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ö== | ||