@@ -22,7 +22,7 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
2222endif ()
2323
2424option (SIMJSON_BUILD_TESTS "Построить тесты" ON )
25- option (SIMJSON_IN_SHARED "Функции simjson должны экспортироваться или импортироваться" Off )
25+ option (SIMJSON_IN_SHARED "Функции simjson будут экспортироваться или импортироваться" Off )
2626
2727add_library (simjson_simjson
2828 src/json.cpp
@@ -56,13 +56,13 @@ function(add_simstr)
5656 set (SIMSTR_BUILD_TESTS OFF )
5757 set (SIMSTR_BENCHMARKS OFF )
5858 if (SIMJSON_IN_SHARED)
59- set (SIMSTR_SHARED On )
59+ set (SIMSTR_IN_SHARED On )
6060 endif ()
6161 FetchContent_Declare (
6262 simstr
6363 GIT_REPOSITORY https://github.com/orefkov/simstr.git
6464 GIT_SHALLOW TRUE
65- GIT_TAG rel.1.2.1
65+ GIT_TAG 1f225a7
6666 FIND_PACKAGE_ARGS NAMES simstr
6767 )
6868 FetchContent_MakeAvailable (simstr)
@@ -73,8 +73,22 @@ add_simstr()
7373target_link_libraries (simjson_simjson PUBLIC simstr::simstr )
7474
7575if (SIMJSON_IN_SHARED)
76+ # Всем объявляем, что мы будем в shared библиотеке
7677 add_compile_definitions (SIMJSON_IN_SHARED )
78+ # Себе объявим, что мы должны экспортировать функции
7779 target_compile_definitions (simjson_simjson PRIVATE SIMJSON_EXPORT )
80+
81+ # Пример построения shared библиотеки, которая включит в себя simjson и simstr.
82+ # Как при этом создать экзешник, пользующийся этой dll - пример в tests/CMakeLists.txt
83+ # Нельзя объявить библиотеку без исходников, добавим просто .h файл
84+ add_library (simjson_dll SHARED include /simjson/json.h )
85+ # simstr нельзя просто так добавить как whole_archive, CMake при сборке simjson уже пометил её как DEFAULT
86+ target_link_libraries (simjson_dll PRIVATE
87+ "$<LINK_LIBRARY :WHOLE_ARCHIVE ,simjson ::simjson >"
88+ simstr_simstr
89+ )
90+ # Но можно для нужного таргета переопределить её как whole_archive
91+ set_property (TARGET simjson_dll PROPERTY LINK_LIBRARY_OVERRIDE "WHOLE_ARCHIVE,simstr_simstr" )
7892endif (SIMJSON_IN_SHARED )
7993
8094if (SIMJSON_BUILD_TESTS)
@@ -93,17 +107,6 @@ if(SIMJSON_BUILD_TESTS)
93107 add_subdirectory (tests )
94108endif ()
95109
96- #[[
97- # Пример построения shared библиотеки, которая включит в себя simjson и simstr.
98- # Необходимо также задать опцию SIMJSON_IN_SHARED. Как при этом создать экзешник,
99- # пользующийся этой dll - пример в tests/CMakeLists.txt
100- if (SIMJSON_IN_SHARED)
101- add_library(simjson_dll SHARED include/simjson/json.h)
102- target_link_libraries(simjson_dll PRIVATE "$<LINK_LIBRARY:WHOLE_ARCHIVE,simjson::simjson>,simstr_simstr>")
103- set_property(TARGET simjson_dll PROPERTY LINK_LIBRARY_OVERRIDE "WHOLE_ARCHIVE,simstr_simstr")
104- endif()
105- #]]
106-
107110# ---- Install rules ----
108111
109112if (NOT CMAKE_SKIP_INSTALL_RULES)
0 commit comments