From 6d3b803d2b0e4bf8703bbfa51a67f378d6bd59f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20DELRIEU?= Date: Tue, 19 Nov 2019 14:58:59 +0100 Subject: [PATCH] only build one target, use BUILD_SHARED_LIBS where appropriate [Retrieved from: https://github.com/docopt/docopt.cpp/commit/6d3b803d2b0e4bf8703bbfa51a67f378d6bd59f6] Signed-off-by: Fabrice Fontaine --- CMakeLists.txt | 39 ++++++--------------------------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index feff32e..14c3420 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,33 +34,15 @@ set(docopt_HEADERS #============================================================================ # Compile targets #============================================================================ -if(MSVC OR XCODE) - # MSVC requires __declspec() attributes, which are achieved via the - # DOCOPT_DLL and DOCOPT_EXPORTS macros below. Since those macros are only - # defined when building a shared library, we must build the shared and - # static libraries completely separately. - # Xcode does not support libraries with only object files as sources. - # See https://cmake.org/cmake/help/v3.0/command/add_library.html?highlight=add_library - add_library(docopt SHARED ${docopt_SOURCES} ${docopt_HEADERS}) - add_library(docopt_s STATIC ${docopt_SOURCES} ${docopt_HEADERS}) -else() - # If not using MSVC or Xcode, we will create an intermediate object target - # to avoid compiling the source code twice. - add_library(docopt_o OBJECT ${docopt_SOURCES} ${docopt_HEADERS}) - set_target_properties(docopt_o PROPERTIES POSITION_INDEPENDENT_CODE TRUE) - - add_library(docopt SHARED $) - set_target_properties(docopt PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_VERSION_MAJOR} - ) - add_library(docopt_s STATIC $) -endif() +add_library(docopt ${docopt_SOURCES} ${docopt_HEADERS}) +set_target_properties(docopt PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} +) target_include_directories(docopt PUBLIC $ $) -target_include_directories(docopt_s PUBLIC $ $) -if(MSVC) +if(MSVC AND BUILD_SHARED_LIBS) # DOCOPT_DLL: Must be specified when building *and* when using the DLL. # That's what the "PUBLIC" means. # DOCOPT_EXPORTS: Must use __declspec(dllexport) when building the DLL. @@ -69,11 +51,6 @@ if(MSVC) PRIVATE DOCOPT_EXPORTS) endif() -if(NOT MSVC) - set_target_properties(docopt PROPERTIES OUTPUT_NAME docopt) - set_target_properties(docopt_s PROPERTIES OUTPUT_NAME docopt) -endif() - if(USE_BOOST_REGEX) add_definitions("-DDOCTOPT_USE_BOOST_REGEX") # This is needed on Linux, where linking a static library into docopt.so @@ -82,9 +59,6 @@ if(USE_BOOST_REGEX) find_package(Boost 1.53 REQUIRED COMPONENTS regex) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(docopt ${Boost_LIBRARIES}) - if(WITH_STATIC) - target_link_libraries(docopt_s ${Boost_LIBRARIES}) - endif() endif() #============================================================================ @@ -120,7 +94,6 @@ set(export_name "docopt-targets") install(TARGETS docopt EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) # Development package -install(TARGETS docopt_s EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES ${docopt_HEADERS} DESTINATION include/docopt) # CMake Package