@@ -50,7 +50,7 @@ set(PUBLIC_HEADERS
5050
5151source_group ("Public API" FILES ${PUBLIC_HEADERS} )
5252
53- set (jsoncpp_sources
53+ set (JSONCPP_SOURCES
5454 json_tool.h
5555 json_reader.cpp
5656 json_valueiterator.inl
@@ -65,32 +65,10 @@ else()
6565 set (INSTALL_EXPORT)
6666endif ()
6767
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-
9068# Specify compiler features required when compiling a given target.
9169# See https://cmake.org/cmake/help/v3.1/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html#prop_gbl:CMAKE_CXX_KNOWN_FEATURES
9270# for complete list of features available
93- target_compile_features (jsoncpp_lib PUBLIC
71+ list ( APPEND REQUIRED_FEATURES
9472 cxx_std_11 # Compiler mode is aware of C++ 11.
9573 #MSVC 1900 cxx_alignas # Alignment control alignas, as defined in N2341.
9674 #MSVC 1900 cxx_alignof # Alignment control alignof, as defined in N2341.
@@ -137,16 +115,106 @@ target_compile_features(jsoncpp_lib PUBLIC
137115 cxx_variadic_templates # Variadic templates, as defined in N2242.
138116)
139117
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}
141215 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
142216 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
143217 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
218+ OBJECTS DESTINATION ${CMAKE_INSTALL_LIBDIR}
144219)
145220
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