@@ -5,7 +5,7 @@ include(FetchContent)
55
66project (
77 simjson
8- VERSION 1.0.0
8+ VERSION 1.2.1
99 DESCRIPTION "Very simple json library"
1010 HOMEPAGE_URL "https://github.com/orefkov/simjson"
1111 LANGUAGES CXX
@@ -22,7 +22,6 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
2222endif ()
2323
2424option (SIMJSON_BUILD_TESTS "Построить тесты" ON )
25- option (SIMJSON_IN_SHARED "Функции simjson будут экспортироваться или импортироваться" Off )
2625
2726add_library (simjson_simjson
2827 src/json.cpp
@@ -37,12 +36,20 @@ target_include_directories(
3736
3837target_compile_features (simjson_simjson PUBLIC cxx_std_20 )
3938
40- if (NOT CMAKE_CXX_SIMULATE_ID)
41- set (CMAKE_CXX_SIMULATE_ID "None" )
42- endif ()
4339# Для MSVC подключаем natvis файл для красивой отладки
44- if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR ${CMAKE_CXX_SIMULATE_ID} STREQUAL MSVC )
45- target_link_options (simjson_simjson PUBLIC "/natvis:${CMAKE_CURRENT_SOURCE_DIR} /for_debug/simjson.natvis" )
40+ if (${CMAKE_BUILD_TYPE} STREQUAL Debug)
41+ if (NOT CMAKE_CXX_SIMULATE_ID)
42+ set (CMAKE_CXX_SIMULATE_ID "None" )
43+ endif ()
44+ if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC OR ${CMAKE_CXX_SIMULATE_ID} STREQUAL MSVC )
45+ add_custom_command (
46+ TARGET simjson_simjson PRE_BUILD
47+ COMMAND ${CMAKE_COMMAND} -E copy
48+ ${CMAKE_SOURCE_DIR} /for_debug/simjson.natvis
49+ ${CMAKE_CURRENT_BINARY_DIR} /simjson.natvis
50+ )
51+ target_link_options (simjson_simjson PUBLIC "/natvis:simjson.natvis" )
52+ endif ()
4653endif ()
4754
4855set_target_properties (
@@ -75,24 +82,12 @@ add_simstr()
7582
7683target_link_libraries (simjson_simjson PUBLIC simstr::simstr )
7784
78- if (SIMJSON_IN_SHARED )
85+ if (BUILD_SHARED_LIBS )
7986 # Всем объявляем, что мы будем в shared библиотеке
8087 add_compile_definitions (SIMJSON_IN_SHARED )
8188 # Себе объявим, что мы должны экспортировать функции
8289 target_compile_definitions (simjson_simjson PRIVATE SIMJSON_EXPORT )
83-
84- # Пример построения shared библиотеки, которая включит в себя simjson и simstr.
85- # Как при этом создать экзешник, пользующийся этой dll - пример в tests/CMakeLists.txt
86- # Нельзя объявить библиотеку без исходников, добавим просто .h файл
87- add_library (simjson_dll SHARED include /simjson/json.h )
88- # simstr нельзя просто так добавить как whole_archive, CMake при сборке simjson уже пометил её как DEFAULT
89- target_link_libraries (simjson_dll PRIVATE
90- "$<LINK_LIBRARY :WHOLE_ARCHIVE ,simjson ::simjson >"
91- simstr_simstr
92- )
93- # Но можно для нужного таргета переопределить её как whole_archive
94- set_property (TARGET simjson_dll PROPERTY LINK_LIBRARY_OVERRIDE "WHOLE_ARCHIVE,simstr_simstr" )
95- endif (SIMJSON_IN_SHARED )
90+ endif (BUILD_SHARED_LIBS )
9691
9792if (SIMJSON_BUILD_TESTS)
9893 enable_testing ()
0 commit comments