master
ブランチ master
LibJson / CMakeLists.txt
2.5 KB、94行 生 Blame 履歴
1cmake_minimum_required(VERSION 3.14...3.28)
2project(json LANGUAGES CXX VERSION 1.0.1)
3
4set(CMAKE_CXX_STANDARD 20)
5set(CMAKE_CXX_STANDARD_REQUIRED ON)
6set(CMAKE_CXX_EXTENSIONS OFF)
7
8set(BUILD_SHARED_LIBS OFF CACHE BOOL "静的リンク" FORCE)
9
10option(ENABLE_TEST "テストプロジェクト" ON)
11
12if(MSVC)
13 set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
14 add_compile_options(/utf-8)
15endif()
16
17# 本ライブラリ
18add_library(json STATIC)
19file(GLOB_RECURSE LIBJSON_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc")
20file(GLOB_RECURSE LIBJSON_INC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh")
21
22target_sources(json
23 PRIVATE "${LIBJSON_SRC}"
24 PUBLIC "${LIBJSON_INC}"
25)
26
27target_include_directories(json PUBLIC
28 "${CMAKE_CURRENT_SOURCE_DIR}/include"
29)
30
31# テスト用
32if(ENABLE_TEST)
33 configure_file(
34 ${CMAKE_CURRENT_SOURCE_DIR}/tests/webfinger.json
35 ${CMAKE_CURRENT_BINARY_DIR}/webfinger.json
36 COPYONLY
37 )
38
39 configure_file(
40 ${CMAKE_CURRENT_SOURCE_DIR}/tests/activitypub.json
41 ${CMAKE_CURRENT_BINARY_DIR}/activitypub.json
42 COPYONLY
43 )
44
45 configure_file(
46 ${CMAKE_CURRENT_SOURCE_DIR}/tests/gltf.json
47 ${CMAKE_CURRENT_BINARY_DIR}/gltf.json
48 COPYONLY
49 )
50
51 add_executable(json_test)
52 file(GLOB_RECURSE TEST_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cc")
53 file(GLOB_RECURSE TEST_INC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hh")
54 target_sources(json_test PRIVATE ${TEST_SRC})
55 target_link_libraries(json_test PRIVATE json)
56
57 if(MSVC)
58 set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT json_test)
59 endif()
60endif()
61
62# OS
63if(UNIX)
64 include(GNUInstallDirs)
65 set(INSTALL_BINDIR ${CMAKE_INSTALL_LIBDIR})
66endif()
67
68if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
69 set(PRODUCTION_BUILD OFF CACHE BOOL "リリース版?" FORCE)
70else()
71 set(PRODUCTION_BUILD ON CACHE BOOL "リリース版?" FORCE)
72endif()
73
74install(TARGETS json
75 RUNTIME DESTINATION ${INSTALL_BINDIR}
76 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
77 COMPONENT Runtime
78)
79
80install(DIRECTORY DESTINATION ${INSTALL_DATADIR}
81 COMPONENT Runtime
82)
83
84if(MSVC)
85 target_compile_definitions(json PUBLIC _CRT_SECURE_NO_WARNINGS)
86elseif(MINGW)
87 if(PRODUCTION_BUILD)
88 target_link_options(json PRIVATE -mwindows)
89 endif()
90elseif(APPLE OR UNIX)
91 if(PRODUCTION_BUILD)
92 target_link_options(json PRIVATE -s)
93 endif()
94endif()