11cmake_minimum_required (VERSION 3.15 )
2+
3+ # ======================
4+ # Version detection
5+ # ======================
26find_package (Git QUIET )
7+
8+ set (IMETH_VERSION "1.0.0" )
9+
310if (GIT_FOUND)
411 execute_process (
5- COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
6- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
7- OUTPUT_VARIABLE GIT_VERSION
8- OUTPUT_STRIP_TRAILING_WHITESPACE
9- ERROR_QUIET
12+ COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
13+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
14+ OUTPUT_VARIABLE GIT_VERSION
15+ OUTPUT_STRIP_TRAILING_WHITESPACE
16+ ERROR_QUIET
1017 )
1118 if (GIT_VERSION)
12- string (REGEX REPLACE "^v" "" GIT_VERSION ${GIT_VERSION} )
13- project (imeth LANGUAGES CXX VERSION ${GIT_VERSION} )
14- else ()
15- project (imeth LANGUAGES CXX VERSION 1.0.0)
19+ string (REGEX REPLACE "^v" "" IMETH_VERSION "${GIT_VERSION} " )
1620 endif ()
17- else ()
18- project (imeth LANGUAGES CXX VERSION 1.0.0)
1921endif ()
20- project (imeth LANGUAGES CXX VERSION ${PROJECT_VERSION} )
2122
23+ project (imeth VERSION ${IMETH_VERSION} LANGUAGES CXX )
24+
25+ # ======================
26+ # Build settings
27+ # ======================
2228set (CMAKE_CXX_STANDARD 20)
2329set (CMAKE_CXX_STANDARD_REQUIRED ON )
2430set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
2531
2632# ======================
27- # Main library
33+ # Library
2834# ======================
29- file (GLOB_RECURSE IMETH_SOURCES
30- CONFIGURE_DEPENDS
31- "src/*.cpp"
35+ file (GLOB_RECURSE IMETH_SOURCES CONFIGURE_DEPENDS
36+ src/*.cpp
3237)
33- add_library (imeth STATIC ${IMETH_SOURCES}
34- include /imeth/operation/combinatoric.hpp
35- src/operation/combinatoric.cpp )
3638
37- # Proper include handling (for both build & install)
39+ add_library (imeth STATIC ${IMETH_SOURCES} )
40+
41+ add_library (imeth::imeth ALIAS imeth )
42+
3843target_include_directories (imeth
3944 PUBLIC
4045 $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /include >
@@ -45,31 +50,51 @@ target_include_directories(imeth
4550# Installation
4651# ======================
4752include (GNUInstallDirs )
53+ include (CMakePackageConfigHelpers )
4854
4955install (
5056 TARGETS imeth
5157 EXPORT imethTargets
5258 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
59+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
60+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
5361)
5462
5563install (
56- DIRECTORY include/imeth/
57- DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /imeth
64+ DIRECTORY include/
65+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
5866)
5967
6068install (
6169 EXPORT imethTargets
62- FILE imethConfig.cmake
6370 NAMESPACE imeth::
6471 DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/imeth
6572)
6673
6774# ======================
68- # Test executable
75+ # Config files
6976# ======================
70- add_executable (imeth_test tests/main.cpp )
77+ configure_package_config_file (
78+ ${CMAKE_CURRENT_SOURCE_DIR} /cmake/imethConfig.cmake.in
79+ ${CMAKE_CURRENT_BINARY_DIR} /imethConfig.cmake
80+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/imeth
81+ )
7182
72- target_link_libraries (imeth_test PRIVATE imeth )
83+ write_basic_package_version_file (
84+ ${CMAKE_CURRENT_BINARY_DIR} /imethConfigVersion.cmake
85+ VERSION ${PROJECT_VERSION}
86+ COMPATIBILITY AnyNewerVersion
87+ )
7388
74- # Add include dir for test only
75- target_include_directories (imeth_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /include )
89+ install (
90+ FILES
91+ ${CMAKE_CURRENT_BINARY_DIR} /imethConfig.cmake
92+ ${CMAKE_CURRENT_BINARY_DIR} /imethConfigVersion.cmake
93+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/imeth
94+ )
95+
96+ # ======================
97+ # Tests (build-only)
98+ # ======================
99+ add_executable (imeth_test tests/main.cpp )
100+ target_link_libraries (imeth_test PRIVATE imeth )
0 commit comments