cmake_minimum_required(VERSION 3.14...3.28) project(json LANGUAGES CXX VERSION 1.0.1) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(BUILD_SHARED_LIBS OFF CACHE BOOL "静的リンク" FORCE) option(ENABLE_TEST "テストプロジェクト" ON) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") add_compile_options(/utf-8) endif() # 本ライブラリ add_library(json STATIC) file(GLOB_RECURSE LIBJSON_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc") file(GLOB_RECURSE LIBJSON_INC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh") target_sources(json PRIVATE "${LIBJSON_SRC}" PUBLIC "${LIBJSON_INC}" ) target_include_directories(json PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include" ) # テスト用 if(ENABLE_TEST) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/tests/webfinger.json ${CMAKE_CURRENT_BINARY_DIR}/webfinger.json COPYONLY ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/tests/activitypub.json ${CMAKE_CURRENT_BINARY_DIR}/activitypub.json COPYONLY ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/tests/gltf.json ${CMAKE_CURRENT_BINARY_DIR}/gltf.json COPYONLY ) add_executable(json_test) file(GLOB_RECURSE TEST_SRC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cc") file(GLOB_RECURSE TEST_INC CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hh") target_sources(json_test PRIVATE ${TEST_SRC}) target_link_libraries(json_test PRIVATE json) if(MSVC) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT json_test) endif() endif() # OS if(UNIX) include(GNUInstallDirs) set(INSTALL_BINDIR ${CMAKE_INSTALL_LIBDIR}) endif() if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(PRODUCTION_BUILD OFF CACHE BOOL "リリース版?" FORCE) else() set(PRODUCTION_BUILD ON CACHE BOOL "リリース版?" FORCE) endif() install(TARGETS json RUNTIME DESTINATION ${INSTALL_BINDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE COMPONENT Runtime ) install(DIRECTORY DESTINATION ${INSTALL_DATADIR} COMPONENT Runtime ) if(MSVC) target_compile_definitions(json PUBLIC _CRT_SECURE_NO_WARNINGS) elseif(MINGW) if(PRODUCTION_BUILD) target_link_options(json PRIVATE -mwindows) endif() elseif(APPLE OR UNIX) if(PRODUCTION_BUILD) target_link_options(json PRIVATE -s) endif() endif()