Merge pull request #514 from stackforce/feature/improve-cmake-lists

Feature/improve cmake lists
This commit is contained in:
Gabi Melman 2017-08-25 17:11:33 +03:00 committed by GitHub
commit 02b9f970d3
1 changed files with 116 additions and 91 deletions

View File

@ -4,10 +4,14 @@
# #
cmake_minimum_required(VERSION 3.1) cmake_minimum_required(VERSION 3.1)
project(spdlog VERSION 1.0.0) project(spdlog VERSION 0.14.0)
include(CTest) include(CTest)
include(CMakeDependentOption) include(CMakeDependentOption)
include(GNUInstallDirs)
#---------------------------------------------------------------------------------------
# compiler config
#---------------------------------------------------------------------------------------
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
@ -15,6 +19,9 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCH
set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
endif() endif()
#---------------------------------------------------------------------------------------
# spdlog target
#---------------------------------------------------------------------------------------
add_library(spdlog INTERFACE) add_library(spdlog INTERFACE)
option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF) option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF)
@ -27,7 +34,7 @@ target_include_directories(
spdlog spdlog
INTERFACE INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>" "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
"$<INSTALL_INTERFACE:include>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
) )
set(HEADER_BASE "${CMAKE_CURRENT_SOURCE_DIR}/include") set(HEADER_BASE "${CMAKE_CURRENT_SOURCE_DIR}/include")
@ -40,52 +47,70 @@ if(SPDLOG_BUILD_TESTING)
add_subdirectory(tests) add_subdirectory(tests)
endif() endif()
### Install ### #---------------------------------------------------------------------------------------
# * https://github.com/forexample/package-example # Install/export targets and files
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") #---------------------------------------------------------------------------------------
# set files and directories
set(config_install_dir "lib/cmake/${PROJECT_NAME}") set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
set(include_install_dir "include") set(include_install_dir "${CMAKE_INSTALL_INCLUDEDIR}")
set(pkgconfig_install_dir "lib/pkgconfig") set(pkgconfig_install_dir "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
set(version_config "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") set(project_config "${PROJECT_NAME}Config.cmake")
set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") set(pkg_config "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc")
set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc")
set(targets_export_name "${PROJECT_NAME}Targets") set(targets_export_name "${PROJECT_NAME}Targets")
set(namespace "${PROJECT_NAME}::") set(namespace "${PROJECT_NAME}::")
# generate package version file
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
write_basic_package_version_file( write_basic_package_version_file(
"${version_config}" COMPATIBILITY SameMajorVersion "${version_config}" COMPATIBILITY SameMajorVersion
) )
# Note: use 'targets_export_name' # configure pkg config file
configure_file("cmake/Config.cmake.in" "${project_config}" @ONLY)
configure_file("cmake/spdlog.pc.in" "${pkg_config}" @ONLY) configure_file("cmake/spdlog.pc.in" "${pkg_config}" @ONLY)
# install targets
install( install(
TARGETS spdlog TARGETS spdlog
EXPORT "${targets_export_name}" EXPORT "${targets_export_name}"
INCLUDES DESTINATION "${include_install_dir}" INCLUDES DESTINATION "${include_install_dir}"
) )
install(DIRECTORY "include/spdlog" DESTINATION "${include_install_dir}") # install headers
install( install(
FILES "${project_config}" "${version_config}" DIRECTORY "${HEADER_BASE}/${PROJECT_NAME}"
DESTINATION "${include_install_dir}"
)
# install project version file
install(
FILES "${version_config}"
DESTINATION "${config_install_dir}" DESTINATION "${config_install_dir}"
) )
# install pkg config file
install( install(
FILES "${pkg_config}" FILES "${pkg_config}"
DESTINATION "${pkgconfig_install_dir}" DESTINATION "${pkgconfig_install_dir}"
) )
# install project config file
install( install(
EXPORT "${targets_export_name}" EXPORT "${targets_export_name}"
NAMESPACE "${namespace}" NAMESPACE "${namespace}"
DESTINATION "${config_install_dir}" DESTINATION "${config_install_dir}"
FILE ${project_config}
) )
# export build directory config file
export(
EXPORT ${targets_export_name}
NAMESPACE "${namespace}"
FILE ${project_config}
)
# register project in CMake user registry
export(PACKAGE ${PROJECT_NAME})
file(GLOB_RECURSE spdlog_include_SRCS "${HEADER_BASE}/*.h") file(GLOB_RECURSE spdlog_include_SRCS "${HEADER_BASE}/*.h")
add_custom_target(spdlog_headers_for_ide SOURCES ${spdlog_include_SRCS}) add_custom_target(spdlog_headers_for_ide SOURCES ${spdlog_include_SRCS})