From 5d6bd7cd405bec3663efbf475c891c3db8be509a Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 22 Sep 2023 19:46:26 -0400 Subject: [PATCH] build: + cmake boilerplate to make indentlog cmake-findable --- CMakeLists.txt | 51 +++++++++++++++++++++++++++------- cmake/indentlogConfig.cmake.in | 4 +++ 2 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 cmake/indentlogConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index b8365f9..472cd5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.10) -project(nestlog VERSION 0.1) +project(indentlog VERSION 0.1) enable_language(CXX) include(cmake/nestlog.cmake) include(cmake/code-coverage.cmake) enable_testing() -# activate code coverage for all executables + libraries (when -DCODE_COVERAGE=ON ??) +# activate code coverage for all executables + libraries (when -DCODE_COVERAGE=ON) add_code_coverage() # 1. assuming that /nix/store/ prefixes .hpp files belonging to gcc, catch2 etc. @@ -27,6 +27,9 @@ if(NOT USER) set(USER $ENV{USER}) endif() +# hmm. this works if explicitly given with cmake: +# cmake -DCMAKE_INSTALL_PREFIX=/home/roland/local path/to/source +# but not as default if(NOT CMAKE_INSTALL_PREFIX) set(CMAKE_INSTALL_PREFIX /home/${USER}/local CACHE STRING "install directory") endif() @@ -37,16 +40,44 @@ endif() add_subdirectory(example) add_subdirectory(utest) -# header-only library -#add_library(indentlog INTERFACE) -#target_include_directories(indentlog INTERFACE -# $ -# $ -# ) +# header-only library. +# see [[https://stackoverflow.com/questions/47718485/install-and-export-interface-only-library-cmake]] # -#install(TARGETS indentlog -# PUBLIC_HEADER DESTINATION include) # COMPONENT Development +add_library(indentlog INTERFACE) +target_include_directories(indentlog INTERFACE + $ + $ + ) +include(CMakePackageConfigHelpers) +write_basic_package_version_file("${PROJECT_BINARY_DIR}/indentlogConfigVersion.cmake" + VERSION 0.1 + COMPATIBILITY AnyNewerVersion +) + +install( + TARGETS indentlog + EXPORT indentlogTargets + LIBRARY DESTINATION lib COMPONENT Runtime + ARCHIVE DESTINATION lib COMPONENT Development + RUNTIME DESTINATION bin COMPONENT Runtime + PUBLIC_HEADER DESTINATION include COMPONENT Development + BUNDLE DESTINATION bin COMPONENT Runtime + ) + +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/indentlogConfig.cmake.in" + "${PROJECT_BINARY_DIR}/indentlogConfig.cmake" + INSTALL_DESTINATION lib/cmake/indentlog + ) + +install(EXPORT indentlogTargets DESTINATION lib/cmake/indentlog) +install( + FILES + "${PROJECT_BINARY_DIR}/indentlogConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/indentlogConfig.cmake" + DESTINATION lib/cmake/indentlog) install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION include) install(TARGETS hello DESTINATION bin/indentlog/example) diff --git a/cmake/indentlogConfig.cmake.in b/cmake/indentlogConfig.cmake.in new file mode 100644 index 0000000..cc57615 --- /dev/null +++ b/cmake/indentlogConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/indentlogTargets.cmake") +check_required_components("@PROJECT_NAME@")