# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later cmake_minimum_required(VERSION 3.14...3.22) include(cmake/version-from-git.cmake) # ---- Project ---- project(Glimpses VERSION ${VERSION_STRING} LANGUAGES CXX) # ---- Include guards ---- if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.") endif() # ---- Add dependencies via CPM ---- # see https://github.com/TheLartians/CPM.cmake for more info include(cmake/get_cpm.cmake) # PackageProject.cmake will be used to make our target installable CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.8.0") # CPMAddPackage( NAME fmt GIT_TAG 9.1.0 GITHUB_REPOSITORY fmtlib/fmt OPTIONS "FMT_INSTALL YES" # create an installable target ) # ---- Add source files ---- file(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") # ---- Create library ---- add_library(${PROJECT_NAME} ${headers} ${sources}) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17) # being a cross-platform target, we enforce standards conformance on MSVC target_compile_options(${PROJECT_NAME} PUBLIC "$<$:/permissive->") # Link dependencies target_link_libraries(${PROJECT_NAME} PRIVATE # fmt::fmt ) target_include_directories( ${PROJECT_NAME} PUBLIC $ $ ) # the location where the project's version header will be placed should match the project's regular header paths string(TOLOWER ${PROJECT_NAME}/version.h VERSION_HEADER_LOCATION) packageProject( NAME ${PROJECT_NAME} VERSION ${PROJECT_VERSION} NAMESPACE ${PROJECT_NAME} BINARY_DIR ${PROJECT_BINARY_DIR} INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} VERSION_HEADER "${VERSION_HEADER_LOCATION}" COMPATIBILITY SameMajorVersion DEPENDENCIES "" )