added cmake option to build static and shared libraries at once
authorPeter Spiess-Knafl <psk@autistici.org>
Tue, 27 Jan 2015 20:01:42 +0000 (20:01 +0000)
committerChristopher Dunn <cdunn2001@gmail.com>
Wed, 28 Jan 2015 00:22:43 +0000 (18:22 -0600)
See #147 and #149.

README.md
src/jsontestrunner/CMakeLists.txt
src/lib_json/CMakeLists.txt
src/test_lib_json/CMakeLists.txt

index 099f17f..cf8b3db 100644 (file)
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ Alternatively, from the command-line on Unix in the source directory:
 
     mkdir -p build/debug
     cd build/debug
-    cmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_SHARED=OFF -G "Unix Makefiles" ../..
+    cmake -DCMAKE_BUILD_TYPE=debug -DJSONCPP_LIB_BUILD_STATIC=ON -DJSONCPP_LIB_BUILD_SHARED=OFF -G "Unix Makefiles" ../..
     make
 
 Running `cmake -`" will display the list of available generators (passed using
index dd8e217..7faf0a5 100644 (file)
@@ -7,7 +7,13 @@ ENDIF(JSONCPP_LIB_BUILD_SHARED)
 ADD_EXECUTABLE(jsontestrunner_exe
                main.cpp
                )
-TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib)
+
+IF(JSONCPP_LIB_BUILD_SHARED)
+    TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib)
+ELSE(JSONCPP_LIB_BUILD_SHARED)
+    TARGET_LINK_LIBRARIES(jsontestrunner_exe jsoncpp_lib_static)
+ENDIF(JSONCPP_LIB_BUILD_SHARED)
+
 SET_TARGET_PROPERTIES(jsontestrunner_exe PROPERTIES OUTPUT_NAME jsontestrunner_exe)
 
 IF(PYTHONINTERP_FOUND)
index d0f6a5e..133d110 100644 (file)
@@ -1,15 +1,10 @@
 OPTION(JSONCPP_LIB_BUILD_SHARED "Build jsoncpp_lib as a shared library." OFF)
+OPTION(JSONCPP_LIB_BUILD_STATIC "Build jsoncpp_lib static library." ON)
+
 IF(BUILD_SHARED_LIBS)
   SET(JSONCPP_LIB_BUILD_SHARED ON)
 ENDIF(BUILD_SHARED_LIBS)
 
-IF(JSONCPP_LIB_BUILD_SHARED)
-  SET(JSONCPP_LIB_TYPE SHARED)
-  ADD_DEFINITIONS( -DJSON_DLL_BUILD )
-ELSE(JSONCPP_LIB_BUILD_SHARED)
-  SET(JSONCPP_LIB_TYPE STATIC)
-ENDIF(JSONCPP_LIB_BUILD_SHARED)
-
 if( CMAKE_COMPILER_IS_GNUCXX )
   #Get compiler version.
   execute_process( COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
@@ -36,25 +31,52 @@ SET( PUBLIC_HEADERS
 
 SOURCE_GROUP( "Public API" FILES ${PUBLIC_HEADERS} )
 
-ADD_LIBRARY( jsoncpp_lib ${JSONCPP_LIB_TYPE}
-             ${PUBLIC_HEADERS} 
-             json_tool.h
-             json_reader.cpp
-             json_batchallocator.h
-             json_valueiterator.inl
-             json_value.cpp
-             json_writer.cpp
-             version.h.in
-             )
-SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp )
-SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR} )
+SET(jsoncpp_sources
+                json_tool.h
+                json_reader.cpp
+                json_batchallocator.h
+                json_valueiterator.inl
+                json_value.cpp
+                json_writer.cpp
+                version.h.in)
+
+IF(JSONCPP_LIB_BUILD_SHARED)
+    ADD_DEFINITIONS( -DJSON_DLL_BUILD )
+    ADD_LIBRARY(jsoncpp_lib SHARED ${PUBLIC_HEADERS} ${jsoncpp_sources})
+    SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
+    SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp )
+
+    INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
+         RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
+         LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
+         ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
+
+    IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
+        TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib PUBLIC
+                                   $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
+                                   $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>)
+    ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
 
-IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
-    TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib PUBLIC
+ENDIF()
+
+IF(JSONCPP_LIB_BUILD_STATIC)
+    ADD_LIBRARY(jsoncpp_lib_static STATIC ${PUBLIC_HEADERS} ${jsoncpp_sources})
+    SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
+    SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES OUTPUT_NAME jsoncpp )
+
+    INSTALL( TARGETS jsoncpp_lib_static ${INSTALL_EXPORT}
+         RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
+         LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
+             ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR})
+
+    IF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
+        TARGET_INCLUDE_DIRECTORIES( jsoncpp_lib_static PUBLIC
                                 $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
                                 $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/${JSONCPP_INCLUDE_DIR}>
                                 )
-ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
+     ENDIF(NOT CMAKE_VERSION VERSION_LESS 2.8.11)
+
+ENDIF()
 
 # Install instructions for this target
 IF(JSONCPP_WITH_CMAKE_PACKAGE)
@@ -62,9 +84,3 @@ IF(JSONCPP_WITH_CMAKE_PACKAGE)
 ELSE(JSONCPP_WITH_CMAKE_PACKAGE)
     SET(INSTALL_EXPORT)
 ENDIF(JSONCPP_WITH_CMAKE_PACKAGE)
-
-INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
-         RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
-         LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
-         ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR}
-)
index 24dc56f..df5a924 100644 (file)
@@ -9,7 +9,12 @@ ADD_EXECUTABLE( jsoncpp_test
                 main.cpp
                 )
 
-TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib)
+
+IF(JSONCPP_LIB_BUILD_SHARED)
+    TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib)
+ELSE(JSONCPP_LIB_BUILD_SHARED)
+    TARGET_LINK_LIBRARIES(jsoncpp_test jsoncpp_lib_static)
+ENDIF(JSONCPP_LIB_BUILD_SHARED)
 
 # another way to solve issue #90
 #set_target_properties(jsoncpp_test PROPERTIES COMPILE_FLAGS -ffloat-store)