cmake_minimum_required(VERSION 3.14 FATAL_ERROR) # Standalone configuration of the spdlog logger from a JSON file. project( SPDLOGConfig VERSION 1.0.0 LANGUAGES CXX ) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") 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() # ---- Dependencies via CPM ---- set(CPM_SOURCE_CACHE "${PROJECT_SOURCE_DIR}/../.cache-CPM-packages") include(cmake/CPM.cmake) CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.13.0") # ---- spdlog (shared, std::format backend like the main project) ---- CPMAddPackage( NAME spdlog GITHUB_REPOSITORY gabime/spdlog GIT_TAG "v1.17.0" OPTIONS "SPDLOG_BUILD_EXAMPLE OFF" "SPDLOG_BUILD_SHARED ON" "SPDLOG_USE_STD_FORMAT ON" "SPDLOG_INSTALL ON" ) # ---- reflect-cpp (JSON deserialization of the config file) ---- CPMAddPackage( NAME reflectcpp GITHUB_REPOSITORY getml/reflect-cpp GIT_TAG "v0.24.0" OPTIONS "REFLECTCPP_BUILD_SHARED ON" "CMAKE_POSITION_INDEPENDENT_CODE ON" "REFLECTCPP_INSTALL ON" ) add_library(${PROJECT_NAME} INTERFACE) add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_20) target_link_libraries(${PROJECT_NAME} INTERFACE spdlog::spdlog reflectcpp::reflectcpp) target_include_directories( ${PROJECT_NAME} INTERFACE $ $ ) # ---- Tests (only when top-level and not disabled by consumers) ---- option(SPDLOGCONFIG_BUILD_TESTS "Build SPDLOGConfig's own test suite" ON) if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR AND SPDLOGCONFIG_BUILD_TESTS) enable_testing() add_subdirectory(test) endif() # ---- Installable / CPM-compatible package ---- install(TARGETS ${PROJECT_NAME} INCLUDES DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} ) 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 "" COMPATIBILITY SameMajorVersion DEPENDENCIES "spdlog 1.17.0;reflectcpp 0.24.0" )