Files
spdlogConfig/CMakeLists.txt
T

91 lines
2.6 KiB
CMake

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
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include/${PROJECT_NAME}-${PROJECT_VERSION}>
)
# ---- 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"
)