Skip to content

Commit 5e8595c

Browse files
Peter Spiess-Knaflcdunn2001
authored andcommitted
added cmake option to build static and shared libraries at once
See open-source-parsers#147 and open-source-parsers#149.
1 parent 38042b3 commit 5e8595c

File tree

4 files changed

+58
-31
lines changed

4 files changed

+58
-31
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Alternatively, from the command-line on Unix in the source directory:
6666

6767
mkdir -p build/debug
6868
cd build/debug
69-
cmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_SHARED=OFF -G "Unix Makefiles" ../..
69+
cmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_STATIC=ON -DJSONCPP_LIB_BUILD_SHARED=OFF -G "Unix Makefiles" ../..
7070
make
7171

7272
Running `cmake -`" will display the list of available generators (passed using

src/jsontestrunner/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ ENDIF(JSONCPP_LIB_BUILD_SHARED)
77
ADD_EXECUTABLE(jsontestrunner_exe
88
main.cpp
99
)
10-
TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib)
10+
11+
IF(JSONCPP_LIB_BUILD_SHARED)
12+
TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib)
13+
ELSE(JSONCPP_LIB_BUILD_SHARED)
14+
TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib_static)
15+
ENDIF(JSONCPP_LIB_BUILD_SHARED)
16+
1117
SET_TARGET_PROPERTIES(jsontestrunner_exe PROPERTIES OUTPUT_NAME jsontestrunner_exe)
1218

1319
IF(PYTHONINTERP_FOUND)

src/lib_json/CMakeLists.txt

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
OPTION(JSONCPP_LIB_BUILD_SHARED "Build jsoncpp_lib as a shared library." OFF)
2+
OPTION(JSONCPP_LIB_BUILD_STATIC "Build jsoncpp_lib static library." ON)
3+
24
IF(BUILD_SHARED_LIBS)
35
SET(JSONCPP_LIB_BUILD_SHARED ON)
46
ENDIF(BUILD_SHARED_LIBS)
57

6-
IF(JSONCPP_LIB_BUILD_SHARED)
7-
SET(JSONCPP_LIB_TYPE SHARED)
8-
ADD_DEFINITIONS( -DJSON_DLL_BUILD )
9-
ELSE(JSONCPP_LIB_BUILD_SHARED)
10-
SET(JSONCPP_LIB_TYPE STATIC)
11-
ENDIF(JSONCPP_LIB_BUILD_SHARED)
12-
138
if( CMAKE_COMPILER_IS_GNUCXX )
149
#Get compiler version.
1510
execute_process( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
@@ -36,35 +31,56 @@ SET( PUBLIC_HEADERS
3631

3732
SOURCE_GROUP( "Public API" FILES ${PUBLIC_HEADERS} )
3833

39-
ADD_LIBRARY( jsoncpp_lib ${JSONCPP_LIB_TYPE}
40-
${PUBLIC_HEADERS}
41-
json_tool.h
42-
json_reader.cpp
43-
json_batchallocator.h
44-
json_valueiterator.inl
45-
json_value.cpp
46-
json_writer.cpp
47-
version.h.in
48-
)
49-
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp )
50-
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR} )
34+
SET(jsoncpp_sources
35+
json_tool.h
36+
json_reader.cpp
37+
json_batchallocator.h
38+
json_valueiterator.inl
39+
json_value.cpp
40+
json_writer.cpp
41+
version.h.in)
42+
43+
IF(JSONCPP_LIB_BUILD_SHARED)
44+
ADD_DEFINITIONS( -DJSON_DLL_BUILD )
45+
ADD_LIBRARY(jsoncpp_lib SHARED ${PUBLIC_HEADERS} ${jsoncpp_sources})
46+
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
47+
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp )
48+
49+
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
50+
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
51+
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
52+
ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
53+
54+
IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
55+
TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib PUBLIC
56+
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
57+
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>)
58+
ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
5159

52-
IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
53-
TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib PUBLIC
60+
ENDIF()
61+
62+
IF(JSONCPP_LIB_BUILD_STATIC)
63+
ADD_LIBRARY(jsoncpp_lib_static STATIC ${PUBLIC_HEADERS} ${jsoncpp_sources})
64+
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
65+
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES OUTPUT_NAME jsoncpp )
66+
67+
INSTALL( TARGETS jsoncpp_lib_static ${INSTALL_EXPORT}
68+
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
69+
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
70+
ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
71+
72+
IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
73+
TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib_static PUBLIC
5474
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
5575
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>
5676
)
57-
ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
77+
ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
78+
79+
ENDIF()
5880

5981
# Install instructions for this target
6082
IF(JSONCPP_WITH_CMAKE_PACKAGE)
6183
SET(INSTALL_EXPORT EXPORT jsoncpp)
6284
ELSE(JSONCPP_WITH_CMAKE_PACKAGE)
6385
SET(INSTALL_EXPORT)
6486
ENDIF(JSONCPP_WITH_CMAKE_PACKAGE)
65-
66-
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
67-
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
68-
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
69-
ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR}
70-
)

src/test_lib_json/CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ ADD_EXECUTABLE( jsoncpp_test
99
main.cpp
1010
)
1111

12-
TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib)
12+
13+
IF(JSONCPP_LIB_BUILD_SHARED)
14+
TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib)
15+
ELSE(JSONCPP_LIB_BUILD_SHARED)
16+
TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib_static)
17+
ENDIF(JSONCPP_LIB_BUILD_SHARED)
1318

1419
# another way to solve issue #90
1520
#set_target_properties(jsoncpp_test PROPERTIES COMPILE_FLAGS -ffloat-store)

0 commit comments

Comments
 (0)