Skip to content

Commit 369ce88

Browse files
committed
Use BUILD_SHARED_LIBS to control library type
Right now both shared and static libraries are built at once without options for configuration. Use CMake standard variable BUILD_SHARED_LIBS to control the build type. Reusing shared library objects for static one is a bad idea because -fPIC results in slower static code with more bloat. Thus the option to build both at once is not provided. Users are free to rebuild with -DBUILD_SHARED_LIBS=OFF. This implements requests in #292 and #263, but reverting #276.
1 parent 4cf31d6 commit 369ce88

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

examples/protonect/CMakeLists.txt

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@ if(WIN32 AND NOT MINGW)
66
endif()
77
endif()
88

9+
IF(NOT DEFINED CMAKE_BUILD_TYPE)
10+
# No effect for multi-configuration generators (e.g. for Visual Studio)
11+
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose: RelWithDebInfo Release Debug MinSizeRel None")
12+
ENDIF()
13+
914
PROJECT(libfreenect2)
10-
SET(CMAKE_BUILD_TYPE RelWithDebInfo)
1115

1216
SET(MY_DIR ${libfreenect2_SOURCE_DIR})
1317
SET(DEPENDS_DIR "${MY_DIR}/../../depends" CACHE STRING "dependency directory must be set to 'false' if external deps are used")
1418

19+
OPTION(BUILD_SHARED_LIBS "Build shared (ON) or static (OFF) libraries" ON)
1520
OPTION(ENABLE_CXX11 "Enable C++11 support" OFF)
1621
OPTION(ENABLE_OPENCL "Enable OpenCL support" ON)
1722
OPTION(ENABLE_OPENGL "Enable OpenGL support" ON)
@@ -185,17 +190,13 @@ CONFIGURE_FILE("${MY_DIR}/include/libfreenect2/config.h.in" "${MY_DIR}/include/l
185190
GENERATE_RESOURCES(${RESOURCES_INC_FILE} ${MY_DIR} ${RESOURCES})
186191

187192
ADD_DEFINITIONS(-DRESOURCES_INC)
188-
ADD_LIBRARY(freenect2 OBJECT ${SOURCES})
189-
set_target_properties(freenect2 PROPERTIES POSITION_INDEPENDENT_CODE 1)
190-
ADD_LIBRARY(freenect2shared SHARED $<TARGET_OBJECTS:freenect2>)
191-
ADD_LIBRARY(freenect2static STATIC $<TARGET_OBJECTS:freenect2>)
192-
set_target_properties(freenect2shared PROPERTIES OUTPUT_NAME freenect2)
193-
set_target_properties(freenect2static PROPERTIES OUTPUT_NAME freenect2)
194-
IF(MSVC)
195-
set_target_properties(freenect2static PROPERTIES OUTPUT_NAME freenect2static)
193+
ADD_LIBRARY(freenect2 ${SOURCES})
194+
IF(MSVC AND NOT BUILD_SHARED_LIBS)
195+
# MSVC creates freenect2.lib for both dynamic and static by default
196+
set_target_properties(freenect2 PROPERTIES SUFFIX "static.lib")
196197
ENDIF()
197-
MESSAGE("Linking with these libraries: ${LIBRARIES}")
198-
TARGET_LINK_LIBRARIES(freenect2shared ${LIBRARIES})
198+
MESSAGE(STATUS "Linking with these libraries: ${LIBRARIES}")
199+
TARGET_LINK_LIBRARIES(freenect2 ${LIBRARIES})
199200

200201
SET(Protonect_src
201202
Protonect.cpp
@@ -215,18 +216,16 @@ ADD_EXECUTABLE(Protonect
215216
)
216217

217218
TARGET_LINK_LIBRARIES(Protonect
218-
freenect2shared
219+
freenect2
219220
)
220221

221222
CONFIGURE_FILE(freenect2.cmake.in "${PROJECT_BINARY_DIR}/freenect2Config.cmake" @ONLY)
222223
CONFIGURE_FILE(freenect2.pc.in "${PROJECT_BINARY_DIR}/freenect2.pc" @ONLY)
223224

224-
INSTALL(TARGETS freenect2shared DESTINATION lib)
225-
INSTALL(TARGETS freenect2static DESTINATION lib)
225+
INSTALL(TARGETS freenect2 DESTINATION lib)
226226
INSTALL(DIRECTORY "${MY_DIR}/include/" DESTINATION include PATTERN "*.in" EXCLUDE)
227227
IF(LIBFREENECT2_THREADING_TINYTHREAD)
228228
INSTALL(FILES "${MY_DIR}/src/tinythread/tinythread.h" DESTINATION include/${PROJECT_NAME}/tinythread/)
229229
ENDIF(LIBFREENECT2_THREADING_TINYTHREAD)
230230
INSTALL(FILES "${PROJECT_BINARY_DIR}/freenect2Config.cmake" DESTINATION lib/cmake/freenect2/)
231231
INSTALL(FILES "${PROJECT_BINARY_DIR}/freenect2.pc" DESTINATION lib/pkgconfig/)
232-

0 commit comments

Comments
 (0)