Skip to content

Commit add8fcc

Browse files
committed
Fix shared build.
1 parent 9a082dc commit add8fcc

4 files changed

Lines changed: 19 additions & 36 deletions

File tree

CMakeLists.txt

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ include(FetchContent)
55

66
project(
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)
2222
endif()
2323

2424
option(SIMJSON_BUILD_TESTS "Построить тесты" ON)
25-
option(SIMJSON_IN_SHARED "Функции simjson будут экспортироваться или импортироваться" Off)
2625

2726
add_library(simjson_simjson
2827
src/json.cpp
@@ -37,12 +36,20 @@ target_include_directories(
3736

3837
target_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()
4653
endif()
4754

4855
set_target_properties(
@@ -75,24 +82,12 @@ add_simstr()
7582

7683
target_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

9792
if(SIMJSON_BUILD_TESTS)
9893
enable_testing()

docs/Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ PROJECT_NAME = "simjson"
4848
# could be handy for archiving the generated documentation or if some version
4949
# control system is used.
5050

51-
PROJECT_NUMBER = 1.0
51+
PROJECT_NUMBER = 1.2.1
5252

5353
# Using the PROJECT_BRIEF tag one can provide an optional one line description
5454
# for a project that appears at the top of each page and should give viewers a

readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
Предназначена для работы с JSON при использовании библиотеки [simstr](https://github.com/orefkov/simstr).
55

6-
Версия 1.0.
6+
Версия 1.2.1.
77

88
В этой библиотеке содержится простая реализация простого объекта JsonValue для работы с JSON с использованием строковых объектов
99
библиотеки *simstr*, так как другие библиотеки работают в основном с `std::string` или сырыми `const char*`.

tests/CMakeLists.txt

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,7 @@
22
# project specific logic here.
33
#
44
add_executable(test_json test_json.cpp)
5-
6-
if (NOT SIMJSON_IN_SHARED)
7-
target_link_libraries(test_json simjson::simjson GTest::gtest_main)
8-
else()
9-
# Пример создания экзешника, если simjson и simstr экспортируются из dll.
10-
# Так как мы подключаем только simjson_dll, и входящие в неё либы не видны
11-
# нужно вручную задать каталоги include и стандарт C++20
12-
target_link_libraries(test_json simjson_dll GTest::gtest_main)
13-
get_target_property(SIMJSON_INCLUDES simjson::simjson INCLUDE_DIRECTORIES)
14-
get_target_property(SIMSTR_INCLUDES simstr::simstr INCLUDE_DIRECTORIES)
15-
target_include_directories(test_json PRIVATE ${SIMJSON_INCLUDES} ${SIMSTR_INCLUDES})
16-
target_compile_features(test_json PUBLIC cxx_std_20)
17-
endif()
5+
target_link_libraries(test_json simjson::simjson GTest::gtest_main)
186

197
add_test(NAME test_json COMMAND test_json WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
208

0 commit comments

Comments
 (0)