Skip to content

Commit 190d8f6

Browse files
committed
Доработал сборку
1 parent eb4f35b commit 190d8f6

2 files changed

Lines changed: 21 additions & 18 deletions

File tree

CMakeLists.txt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,22 @@ add_simstr()
7373
target_link_libraries(simjson_simjson PUBLIC simstr::simstr)
7474

7575
if(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+
# Включается опцией SIMJSON_IN_SHARED. Как при этом создать экзешник, пользующийся этой 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")
7892
endif(SIMJSON_IN_SHARED)
7993

8094
if(SIMJSON_BUILD_TESTS)
@@ -93,17 +107,6 @@ if(SIMJSON_BUILD_TESTS)
93107
add_subdirectory(tests)
94108
endif()
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

109112
if(NOT CMAKE_SKIP_INSTALL_RULES)

tests/CMakeLists.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
# CMakeList.txt : CMake project for core_as, include source and define
22
# project specific logic here.
33
#
4+
45
add_executable(test_json test_json.cpp)
5-
target_link_libraries(test_json simjson::simjson GTest::gtest_main)
66

7-
#[[
8-
# Пример создания экзешника, если simjson и simstr экспортируются из dll.
9-
# Так как мы подключаем только simjson_dll, и входящие в неё либы не видны
10-
# нужно вручную задать каталоги include и стандарт C++20
11-
if (SIMJSON_IN_SHARED)
7+
if (NOT SIMJSON_IN_SHARED)
8+
target_link_libraries(test_json simjson::simjson GTest::gtest_main)
9+
else()
10+
# Пример создания экзешника, если simjson и simstr экспортируются из dll.
11+
# Так как мы подключаем только simjson_dll, и входящие в неё либы не видны
12+
# нужно вручную задать каталоги include и стандарт C++20]]
1213
target_link_libraries(test_json simjson_dll GTest::gtest_main)
1314
get_target_property(SIMJSON_INCLUDES simjson::simjson INCLUDE_DIRECTORIES)
1415
get_target_property(SIMSTR_INCLUDES simstr::simstr INCLUDE_DIRECTORIES)
1516
target_include_directories(test_json PRIVATE ${SIMJSON_INCLUDES} ${SIMSTR_INCLUDES})
1617
target_compile_features(test_json PUBLIC cxx_std_20)
1718
endif()
18-
#]]
1919

2020
add_test(NAME test_json COMMAND test_json WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
2121

0 commit comments

Comments
 (0)