@@ -50,7 +50,7 @@ set(PUBLIC_HEADERS
50
50
51
51
source_group ("Public API" FILES ${PUBLIC_HEADERS} )
52
52
53
- set (jsoncpp_sources
53
+ set (JSONCPP_SOURCES
54
54
json_tool.h
55
55
json_reader.cpp
56
56
json_valueiterator.inl
@@ -65,32 +65,10 @@ else()
65
65
set (INSTALL_EXPORT)
66
66
endif ()
67
67
68
-
69
- if (BUILD_SHARED_LIBS )
70
- if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0)
71
- add_compile_definitions (JSON_DLL_BUILD)
72
- else ()
73
- add_definitions (-DJSON_DLL_BUILD)
74
- endif ()
75
- endif ()
76
-
77
- add_library (jsoncpp_lib ${PUBLIC_HEADERS} ${jsoncpp_sources} )
78
- set_target_properties ( jsoncpp_lib PROPERTIES
79
- OUTPUT_NAME jsoncpp
80
- VERSION ${JSONCPP_VERSION}
81
- SOVERSION ${JSONCPP_SOVERSION}
82
- POSITION_INDEPENDENT_CODE ON
83
- )
84
-
85
- # Set library's runtime search path on OSX
86
- if (APPLE )
87
- set_target_properties (jsoncpp_lib PROPERTIES INSTALL_RPATH "@loader_path/." )
88
- endif ()
89
-
90
68
# Specify compiler features required when compiling a given target.
91
69
# See https://cmake.org/cmake/help/v3.1/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html#prop_gbl:CMAKE_CXX_KNOWN_FEATURES
92
70
# for complete list of features available
93
- target_compile_features (jsoncpp_lib PUBLIC
71
+ list ( APPEND REQUIRED_FEATURES
94
72
cxx_std_11 # Compiler mode is aware of C++ 11.
95
73
#MSVC 1900 cxx_alignas # Alignment control alignas, as defined in N2341.
96
74
#MSVC 1900 cxx_alignof # Alignment control alignof, as defined in N2341.
@@ -137,16 +115,106 @@ target_compile_features(jsoncpp_lib PUBLIC
137
115
cxx_variadic_templates # Variadic templates, as defined in N2242.
138
116
)
139
117
140
- install (TARGETS jsoncpp_lib ${INSTALL_EXPORT}
118
+
119
+ if (BUILD_SHARED_LIBS )
120
+ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0)
121
+ add_compile_definitions (JSON_DLL_BUILD)
122
+ else ()
123
+ add_definitions (-DJSON_DLL_BUILD)
124
+ endif ()
125
+
126
+ set (SHARED_LIB ${PROJECT_NAME} _lib)
127
+ add_library (${SHARED_LIB} SHARED ${PUBLIC_HEADERS} ${JSONCPP_SOURCES} )
128
+ set_target_properties (${SHARED_LIB} PROPERTIES
129
+ OUTPUT_NAME jsoncpp
130
+ VERSION ${PROJECT_VERSION}
131
+ SOVERSION ${PROJECT_SOVERSION}
132
+ POSITION_INDEPENDENT_CODE ON
133
+ )
134
+
135
+ # Set library's runtime search path on OSX
136
+ if (APPLE )
137
+ set_target_properties (${SHARED_LIB} PROPERTIES INSTALL_RPATH "@loader_path/." )
138
+ endif ()
139
+
140
+ target_compile_features (${SHARED_LIB} PUBLIC ${REQUIRED_FEATURES} )
141
+
142
+ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
143
+ target_include_directories (${SHARED_LIB} PUBLIC
144
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
145
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR} /${JSONCPP_INCLUDE_DIR} >
146
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include /json>
147
+ )
148
+ endif ()
149
+
150
+ list (APPEND CMAKE_TARGETS ${SHARED_LIB} )
151
+ endif ()
152
+
153
+ if (BUILD_STATIC_LIBS)
154
+ set (STATIC_LIB ${PROJECT_NAME} _static)
155
+ add_library (${STATIC_LIB} STATIC ${PUBLIC_HEADERS} ${JSONCPP_SOURCES} )
156
+
157
+ # avoid name clashes on windows as the shared import lib is alse named jsoncpp.lib
158
+ if (NOT DEFINED STATIC_SUFFIX AND BUILD_SHARED_LIBS )
159
+ set (STATIC_SUFFIX "_static" )
160
+ endif ()
161
+
162
+ set_target_properties (${STATIC_LIB} PROPERTIES
163
+ OUTPUT_NAME jsoncpp${STATIC_SUFFIX}
164
+ VERSION ${PROJECT_VERSION}
165
+ )
166
+
167
+ # Set library's runtime search path on OSX
168
+ if (APPLE )
169
+ set_target_properties (${STATIC_LIB} PROPERTIES INSTALL_RPATH "@loader_path/." )
170
+ endif ()
171
+
172
+ target_compile_features (${SHARED_LIB} PUBLIC ${REQUIRED_FEATURES} )
173
+
174
+ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
175
+ target_include_directories (${STATIC_LIB} PUBLIC
176
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
177
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR} /${JSONCPP_INCLUDE_DIR} >
178
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include /json>
179
+ )
180
+ endif ()
181
+
182
+ list (APPEND CMAKE_TARGETS ${STATIC_LIB} )
183
+ endif ()
184
+
185
+ if (BUILD_OBJECT_LIBS)
186
+ set (OBJECT_LIB ${PROJECT_NAME} _object)
187
+ add_library (${OBJECT_LIB} OBJECT ${PUBLIC_HEADERS} ${JSONCPP_SOURCES} )
188
+
189
+ set_target_properties (${OBJECT_LIB} PROPERTIES
190
+ OUTPUT_NAME jsoncpp
191
+ VERSION ${PROJECT_VERSION}
192
+ SOVERSION ${PROJECT_SOVERSION}
193
+ POSITION_INDEPENDENT_CODE ON
194
+ )
195
+
196
+ # Set library's runtime search path on OSX
197
+ if (APPLE )
198
+ set_target_properties (${OBJECT_LIB} PROPERTIES INSTALL_RPATH "@loader_path/." )
199
+ endif ()
200
+
201
+ target_compile_features (${OBJECT_LIB} PUBLIC ${REQUIRED_FEATURES} )
202
+
203
+ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
204
+ target_include_directories (${OBJECT_LIB} PUBLIC
205
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
206
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR} /${JSONCPP_INCLUDE_DIR} >
207
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include /json>
208
+ )
209
+ endif ()
210
+
211
+ list (APPEND CMAKE_TARGETS ${OBJECT_LIB} )
212
+ endif ()
213
+
214
+ install (TARGETS ${CMAKE_TARGETS} ${INSTALL_EXPORT}
141
215
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
142
216
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
143
217
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
218
+ OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR}
144
219
)
145
220
146
- if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
147
- target_include_directories (jsoncpp_lib PUBLIC
148
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
149
- $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR} /${JSONCPP_INCLUDE_DIR} >
150
- $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} /include /json>
151
- )
152
- endif ()
0 commit comments