CMakeLists.txt 2.3 KB
Newer Older
1
cmake_minimum_required(VERSION 3.0)
N
Niels 已提交
2

3 4
# define the project
project(json VERSION 2.0.0 LANGUAGES CXX)
N
Niels 已提交
5

6
# define project variables
7 8 9 10
set(JSON_TARGET_NAME ${PROJECT_NAME})
set(JSON_UNITTEST_TARGET_NAME "json_unit")
set(JSON_PACKAGE_NAME ${JSON_TARGET_NAME})
set(JSON_TARGETS_FILENAME "${JSON_PACKAGE_NAME}Targets.cmake")
11 12 13 14
set(JSON_CONFIG_FILENAME "${JSON_PACKAGE_NAME}Config.cmake")
set(JSON_CONFIGVERSION_FILENAME "${JSON_PACKAGE_NAME}ConfigVersion.cmake")
set(JSON_CONFIG_DESTINATION "cmake")
set(JSON_INCLUDE_DESTINATION "include/nlohmann")
N
Niels 已提交
15

16
# create and configure the library target
17 18
add_library(${JSON_TARGET_NAME} INTERFACE)
target_include_directories(${JSON_TARGET_NAME} INTERFACE
19 20
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
  $<INSTALL_INTERFACE:${JSON_INCLUDE_DESTINATION}>)
21

22
# create and configure the unit test target
23
add_executable(${JSON_UNITTEST_TARGET_NAME}
24
    "test/catch.hpp" "test/unit.cpp")
25
set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES
26 27 28 29
    CXX_STANDARD 11
    CXX_STANDARD_REQUIRED ON
    COMPILE_DEFINITIONS "$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>"
    COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>")
30 31 32
target_include_directories(${JSON_UNITTEST_TARGET_NAME} PRIVATE "test")
target_link_libraries(${JSON_UNITTEST_TARGET_NAME} ${JSON_TARGET_NAME})

33 34 35 36 37 38 39 40 41 42
# generate a config and config version file for the package
include(CMakePackageConfigHelpers)
configure_package_config_file("cmake/config.cmake.in"
    "${CMAKE_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
    INSTALL_DESTINATION ${JSON_CONFIG_DESTINATION})
write_basic_package_version_file("${CMAKE_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY SameMajorVersion)

# export the library target and store build directory in package registry
43 44 45
export(TARGETS ${JSON_TARGET_NAME}
	FILE "${CMAKE_BINARY_DIR}/${JSON_TARGETS_FILENAME}")
export(PACKAGE ${JSON_PACKAGE_NAME})
46 47 48 49 50 51 52 53 54 55 56 57

# install library target and config files
install(TARGETS ${JSON_TARGET_NAME}
	EXPORT ${JSON_PACKAGE_NAME})
install(FILES "src/json.hpp"
	DESTINATION ${JSON_INCLUDE_DESTINATION})
install(EXPORT ${JSON_PACKAGE_NAME}
	FILE ${JSON_TARGETS_FILENAME}
	DESTINATION ${JSON_CONFIG_DESTINATION})
install(FILES "${CMAKE_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
	"${CMAKE_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
	DESTINATION ${JSON_CONFIG_DESTINATION})