diff --git a/CMakeLists.txt b/CMakeLists.txt index e8b2abf..bf1a415 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,40 +1,45 @@ cmake_minimum_required(VERSION 3.15) + +# ====================== +# Version detection +# ====================== find_package(Git QUIET) + +set(IMETH_VERSION "1.0.0") + if(GIT_FOUND) execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET + COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) if(GIT_VERSION) - string(REGEX REPLACE "^v" "" GIT_VERSION ${GIT_VERSION}) - project(imeth LANGUAGES CXX VERSION ${GIT_VERSION}) - else() - project(imeth LANGUAGES CXX VERSION 1.0.0) + string(REGEX REPLACE "^v" "" IMETH_VERSION "${GIT_VERSION}") endif() -else() - project(imeth LANGUAGES CXX VERSION 1.0.0) endif() -project(imeth LANGUAGES CXX VERSION ${PROJECT_VERSION}) +project(imeth VERSION ${IMETH_VERSION} LANGUAGES CXX) + +# ====================== +# Build settings +# ====================== set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # ====================== -# Main library +# Library # ====================== -file(GLOB_RECURSE IMETH_SOURCES - CONFIGURE_DEPENDS - "src/*.cpp" +file(GLOB_RECURSE IMETH_SOURCES CONFIGURE_DEPENDS + src/*.cpp ) -add_library(imeth STATIC ${IMETH_SOURCES} - include/imeth/operation/combinatoric.hpp - src/operation/combinatoric.cpp) -# Proper include handling (for both build & install) +add_library(imeth STATIC ${IMETH_SOURCES}) + +add_library(imeth::imeth ALIAS imeth) + target_include_directories(imeth PUBLIC $ @@ -45,31 +50,51 @@ target_include_directories(imeth # Installation # ====================== include(GNUInstallDirs) +include(CMakePackageConfigHelpers) install( TARGETS imeth EXPORT imethTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install( - DIRECTORY include/imeth/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/imeth + DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install( EXPORT imethTargets - FILE imethConfig.cmake NAMESPACE imeth:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imeth ) # ====================== -# Test executable +# Config files # ====================== -add_executable(imeth_test tests/main.cpp) +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/imethConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/imethConfig.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imeth +) -target_link_libraries(imeth_test PRIVATE imeth) +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/imethConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion +) -# Add include dir for test only -target_include_directories(imeth_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/imethConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/imethConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/imeth +) + +# ====================== +# Tests (build-only) +# ====================== +add_executable(imeth_test tests/main.cpp) +target_link_libraries(imeth_test PRIVATE imeth) diff --git a/cmake/imethConfig.cmake.in b/cmake/imethConfig.cmake.in new file mode 100644 index 0000000..e8e23dc --- /dev/null +++ b/cmake/imethConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/imethTargets.cmake")