Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 53 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
Expand All @@ -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)
3 changes: 3 additions & 0 deletions cmake/imethConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/imethTargets.cmake")