From 045ebf7a8c9f4ac42e6a1774e1c470850638c463 Mon Sep 17 00:00:00 2001 From: SpectraL519 Date: Wed, 15 May 2024 16:24:27 +0200 Subject: [PATCH] cmake integration test --- CMakeLists.txt | 89 +++++++++++++++--------------------- cmake/cpp-ap-config.cmake.in | 10 ++-- 2 files changed, 40 insertions(+), 59 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 258c14d..d60ddd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.12) -# check if CPP-AP is a top level project +# Check if CPP-AP is a top level project if (NOT DEFINED PROJECT_NAME) set(CPP_AP_IS_TOP_LEVEL_PROJECT ON) else() @@ -15,40 +15,39 @@ project( LANGUAGES CXX ) -# define the library target +# Define the library target add_library(cpp-ap INTERFACE) target_include_directories(cpp-ap INTERFACE $ $ ) +set_target_properties(cpp-ap PROPERTIES + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED YES +) -# installation rules +# Installation configuration include(GNUInstallDirs) -install(TARGETS cpp-ap - EXPORT cpp-ap-targets - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} -) +include(CMakePackageConfigHelpers) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +# Install the headers +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -# generate and install the CMake package configuration files -install(EXPORT cpp-ap-targets - FILE cpp-ap-targets.cmake - NAMESPACE cpp-ap:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap +# Install the library target +install(TARGETS cpp-ap EXPORT cpp-ap-targets) + +# Create a Config file for find_package +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpp-ap-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/cpp-ap-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap ) -include(CMakePackageConfigHelpers) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/cpp-ap-config-version.cmake VERSION ${PROJECT_VERSION} - COMPATIBILITY ExactVersion -) - -configure_package_config_file( - ${CMAKE_CURRENT_LIST_DIR}/cmake/cpp-ap-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/cpp-ap-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap + COMPATIBILITY SameMajorVersion ) install(FILES @@ -57,40 +56,24 @@ install(FILES DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap ) -if (CPP_AP_IS_TOP_LEVEL_PROJECT) - option(CPP_AP_BUILD_TESTS "Build tests" ON) - option(CPP_AP_BUILD_EXAMPLES "Build examples" OFF) - - if(CPP_AP_BUILD_EXAMPLES) - add_subdirectory(examples) - endif() +install(EXPORT cpp-ap-targets + FILE cpp-ap-targets.cmake + NAMESPACE cpp-ap:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap +) - if(CPP_AP_BUILD_TESTS) - enable_testing() +# For FetchContent usage +if (CPP_AP_IS_TOP_LEVEL_PROJECT) + include(CTest) + if (BUILD_TESTING) add_subdirectory(test) endif() +endif() - if(CPP_AP_INSTALL) - install(EXPORT cpp-ap-targets - FILE cpp-ap-config.cmake - NAMESPACE ap:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap - ) - - install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/cpp-ap-config-version.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/cpp-ap - ) - endif() - - set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}") - set(CPACK_PACKAGE_VENDOR "SpectraL519") - set(CPACK_PACKAGE_CONTACT "Jakub MusiaƂ jmusial2003@gmail.com") - set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") - set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}") - set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}") - set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}") +# Exporting from the build tree +export(EXPORT cpp-ap-targets + FILE ${CMAKE_CURRENT_BINARY_DIR}/cpp-ap-targets.cmake + NAMESPACE cpp-ap:: +) - include(CPack) -endif() +export(PACKAGE cpp-ap) diff --git a/cmake/cpp-ap-config.cmake.in b/cmake/cpp-ap-config.cmake.in index 6b4bbff..cf97c93 100644 --- a/cmake/cpp-ap-config.cmake.in +++ b/cmake/cpp-ap-config.cmake.in @@ -1,9 +1,7 @@ @PACKAGE_INIT@ -# avoid repeatedly including the targets -if(NOT TARGET cpp-ap::cpp-ap) - # Provide path for scripts - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +include(CMakeFindDependencyMacro) - include(${CMAKE_CURRENT_LIST_DIR}/cpp-ap-targets.cmake) -endif() +set_and_check(CPP_AP_INCLUDE_DIR "@PACKAGE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@") + +include("${CMAKE_CURRENT_LIST_DIR}/cpp-ap-targets.cmake")