Compare commits

...

2 commits

Author SHA1 Message Date
Konstantin Lampalzer
7c1fbd1118 cmake: make major changes to cmake 2024-09-23 20:34:48 +02:00
Konstantin Lampalzer
d3479764e2 cmake: minor changes for packaging 2024-09-23 18:15:36 +02:00
4 changed files with 27 additions and 73 deletions

View file

@ -15,8 +15,7 @@ include(Versioning)
# After installation this project can be found by 'find_package' command:
#
# find_package(libcreate REQUIRED)
# include_directores(${libcreate_INCLUDE_DIRS})
# target_link_libraries(... ${libcreate_LIBRARIES})
# target_link_libraries(... libcreate)
#
project(
@ -24,8 +23,6 @@ project(
VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH}
)
add_compile_options(-Wall -Wextra -Wpedantic)
set(PACKAGE_VERSION ${TAG_VERSION_MAJOR}.${TAG_VERSION_MINOR}.${TAG_VERSION_PATCH})
option(LIBCREATE_BUILD_TESTS "Enable the build of tests." ON)
@ -60,6 +57,8 @@ add_library(${LIBRARY_NAME} SHARED
src/types.cpp
)
target_compile_options(${LIBRARY_NAME} PRIVATE -Wall -Wextra -Wpedantic -Werror)
# Manually link to thread library for build on ARM
if(THREADS_HAVE_PTHREAD_ARG)
set_property(TARGET ${LIBRARY_NAME} PROPERTY COMPILE_OPTIONS "-pthread")
@ -100,82 +99,36 @@ endforeach()
# Configuration #
#################
include(GNUInstallDirs)
# set(CMAKE_INSTALL_PREFIX "/usr/") // complib needs this, riplib doesn't
# Install directories layout:
# * <prefix>/lib/
# * <prefix>/bin/
# * <prefix>/include/
# * <prefix>/lib/cmake/<PROJECT-NAME>
# * <prefix>/share/<PROJECT_NAME>
set(LIB_INSTALL_DIR "lib")
set(BIN_INSTALL_DIR "bin")
set(INCLUDE_INSTALL_DIR "include")
set(CONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}")
set(SHARE_INSTALL_DIR "share/${PROJECT_NAME}")
set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config-version.cmake")
set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config.cmake")
set(TARGETS_EXPORT_NAME "${PROJECT_NAME}-targets")
include(CMakePackageConfigHelpers)
# Configure '<PROJECT-NAME>-config-version.cmake'
write_basic_package_version_file(
"${VERSION_CONFIG}"
VERSION "${PACKAGE_VERSION}"
COMPATIBILITY SameMajorVersion
)
# Configure '<PROJECT-NAME>-config.cmake'
configure_package_config_file(
"config.cmake.in"
"${PROJECT_CONFIG}"
INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}"
PATH_VARS
INCLUDE_INSTALL_DIR
LIBRARY_NAME
)
###########
# Install #
###########
# Install targets
install(
TARGETS ${LIBRARY_NAME}
EXPORT "${TARGETS_EXPORT_NAME}"
LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
RUNTIME DESTINATION "${BIN_INSTALL_DIR}"
INCLUDES DESTINATION "${INCLUDE_INSTALL_DIR}"
)
# Install headers
install(
DIRECTORY include/
DESTINATION ${INCLUDE_INSTALL_DIR}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)
TARGETS ${LIBRARY_NAME}
EXPORT ${LIBRARY_NAME}-config
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
# Install config
install(
FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}"
DESTINATION "${CONFIG_INSTALL_DIR}"
)
EXPORT ${LIBRARY_NAME}-config
NAMESPACE create::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LIBRARY_NAME})
# Install targets
install(
EXPORT "${TARGETS_EXPORT_NAME}"
DESTINATION "${CONFIG_INSTALL_DIR}"
)
# Install headers
install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/include/${LIBRARY_NAME}/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_NAME})
# Install package.xml (for catkin)
install(
FILES package.xml
DESTINATION ${SHARE_INSTALL_DIR}
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}
)
###########

View file

@ -2,7 +2,7 @@ FROM debian:bookworm
RUN apt update && \
apt install -y \
build-essential cmake git file \
build-essential cmake git file tree \
libboost-system-dev libboost-thread-dev \
libgtest-dev googletest && \
rm -rf /var/lib/apt/lists/*

View file

@ -8,3 +8,8 @@ cmake -B /libcreate/build -S /libcreate -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_F
cmake --build /libcreate/build --config Release
ctest -C Release --output-on-failure
cpack --build /libcreate/build -G DEB
debs=(/libcreate/_packages/*.deb)
cp "${debs[0]}" /tmp/libcreate.deb
dpkg-deb -R /tmp/libcreate.deb /tmp/libcreate
tree /tmp/libcreate

View file

@ -14,7 +14,7 @@ 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}")
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/${CPACK_PACKAGE_NAME}")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
@ -40,11 +40,7 @@ set(
# 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)
message(STATUS "Components to pack: ${CPACK_COMPONENTS_ALL}")
include(CPack)