diff --git a/CMakeLists.txt b/CMakeLists.txt index e28f51f..02dac6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ # Copyright (c) 2016-2020 Alexey Gruzdev # -cmake_minimum_required (VERSION 3.8) +cmake_minimum_required (VERSION 3.15) if(NOT YATO_NO_PROJECT_FOLDERS) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -13,7 +13,10 @@ endif() set(YATO_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -project(Yato) +project(Yato VERSION 1.2.0 LANGUAGES CXX) + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) #========================================== # Output @@ -48,11 +51,6 @@ if(MSVC) list(APPEND yato_extra_sources ${YATO_SOURCE_DIR}/extras/yato.natvis) endif() -add_custom_target(Yato SOURCES ${yato_sources} - ${yato_extra_sources} -) -set_property(TARGET Yato PROPERTY FOLDER "Modules") - #========================================== # Targets @@ -78,6 +76,57 @@ if(YATO_BUILD_ACTORS) list(APPEND YATO_INCLUDE_DIRS "${YATO_SOURCE_DIR}/modules/actors") endif() + +add_library(Yato INTERFACE) + +set_property(TARGET Yato PROPERTY FOLDER "Modules") + +target_sources(Yato INTERFACE + FILE_SET HEADERS + BASE_DIRS ${YATO_SOURCE_DIR}/include + FILES ${yato_sources} +) + +target_include_directories(Yato INTERFACE + $ + $ +) + +#========================================== +# Installation + +# Generate and install CMake config files. +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/YatoConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/YatoConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + +# Install header-only library. +install(TARGETS Yato + EXPORT YatoTargets + FILE_SET HEADERS +) + +install(EXPORT YatoTargets + FILE YatoTargets.cmake + NAMESPACE Yato:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Yato +) + #========================================== # Tests @@ -86,7 +135,7 @@ if(YATO_BUILD_TESTS) add_subdirectory(./tests) endif() -option(YATO_BUILD_PERFORMANCE_TESTS "Buidl performance tests" OFF) +option(YATO_BUILD_PERFORMANCE_TESTS "Build performance tests" OFF) if(YATO_BUILD_PERFORMANCE_TESTS) add_subdirectory(./perf_tests) endif() diff --git a/cmake/YatoConfig.cmake.in b/cmake/YatoConfig.cmake.in new file mode 100644 index 0000000..12b1625 --- /dev/null +++ b/cmake/YatoConfig.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/YatoTargets.cmake") diff --git a/cmake/dependency.gbenchmark.cmake b/cmake/dependency.gbenchmark.cmake index 82a654a..7b144cf 100644 --- a/cmake/dependency.gbenchmark.cmake +++ b/cmake/dependency.gbenchmark.cmake @@ -30,6 +30,7 @@ if(NOT TARGET benchmark) set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR}) set(BENCHMARK_ENABLE_TESTING OFF) + set(BENCHMARK_ENABLE_INSTALL OFF) set(HAVE_LIB_RT OFF) #set(HAVE_STD_REGEX ON) diff --git a/cmake/dependency.gtest.cmake b/cmake/dependency.gtest.cmake index 5e07fd0..5991c7f 100644 --- a/cmake/dependency.gtest.cmake +++ b/cmake/dependency.gtest.cmake @@ -34,6 +34,7 @@ if(NOT TARGET gtest) set(BUILD_GTEST ON CACHE BOOL "gtest setup" FORCE) set(BUILD_GMOCK OFF CACHE BOOL "gtest setup" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "gtest setup" FORCE) + set(INSTALL_GTEST OFF CACHE BOOL "gtest setup" FORCE) set(gtest_disable_pthreads ON CACHE BOOL "gtest setup" FORCE) set(gtest_force_shared_crt ON CACHE BOOL "gtest setup" FORCE)