From a2777162becce3f4b68f4cf91c3adbdd2100d0cc Mon Sep 17 00:00:00 2001 From: Armin Hornung Date: Sun, 29 Jan 2017 22:31:14 +0100 Subject: [PATCH] Optimized Windows build: Don't build shared libs (.lib ambiuguous) and add `d` to debug libraries. Contributed by K. Stepanas. --- dynamicEDT3D/CMakeLists.txt | 3 + dynamicEDT3D/dynamicEDT3DConfig.cmake.in | 12 ++++ dynamicEDT3D/src/CMakeLists.txt | 32 ++++++++--- dynamicEDT3D/src/examples/CMakeLists.txt | 12 +++- octomap/CMakeLists.txt | 6 ++ octomap/octomap-config.cmake.in | 17 ++++-- octomap/src/CMakeLists.txt | 58 +++++++++++-------- octomap/src/math/CMakeLists.txt | 30 +++++++--- octomap/src/testing/CMakeLists.txt | 23 ++++---- octovis/CMakeLists.txt | 3 + octovis/CMakeLists_src.txt | 72 ++++++++++++++++-------- octovis/CMakeModules/FindQGLViewer.cmake | 8 ++- octovis/octovis-config.cmake.in | 19 +++++-- 13 files changed, 209 insertions(+), 86 deletions(-) diff --git a/dynamicEDT3D/CMakeLists.txt b/dynamicEDT3D/CMakeLists.txt index 865daaf7..aefe7948 100644 --- a/dynamicEDT3D/CMakeLists.txt +++ b/dynamicEDT3D/CMakeLists.txt @@ -93,6 +93,9 @@ IF(WIN32) set(DYNAMICEDT3D_LIBRARY "${CMAKE_IMPORT_LIBRARY_PREFIX}dynamicedt3d${CMAKE_IMPORT_LIBRARY_SUFFIX}" ) + set(DYNAMICEDT3D_LIBRARY_DEBUG + "${CMAKE_IMPORT_LIBRARY_PREFIX}dynamicedt3dd${CMAKE_IMPORT_LIBRARY_SUFFIX}" + ) ELSE() set(DYNAMICEDT3D_LIBRARY "${CMAKE_SHARED_LIBRARY_PREFIX}dynamicedt3d${CMAKE_SHARED_LIBRARY_SUFFIX}" diff --git a/dynamicEDT3D/dynamicEDT3DConfig.cmake.in b/dynamicEDT3D/dynamicEDT3DConfig.cmake.in index c8ffd885..b1a2015d 100644 --- a/dynamicEDT3D/dynamicEDT3DConfig.cmake.in +++ b/dynamicEDT3D/dynamicEDT3DConfig.cmake.in @@ -27,6 +27,18 @@ set(DYNAMICEDT3D_VERSION "@DYNAMICEDT3D_VERSION@") set_and_check(DYNAMICEDT3D_INCLUDE_DIRS "@PACKAGE_DYNAMICEDT3D_INCLUDE_DIRS@") set_and_check(DYNAMICEDT3D_LIBRARY_DIRS "@PACKAGE_DYNAMICEDT3D_LIB_DIR@") +if(WIN32) + set(DYNAMICEDT3D_LIBRARIES + optimized "@DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY@" + debug "@DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY_DEBUG@" + ) + set(DYNAMICEDT3D_LIBRARIES + optimized "@PACKAGE_DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY@" + debug"@PACKAGE_DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY_DEBUG@" + ) +else(WIN32) + set(DYNAMICEDT3D_LIBRARIES "@PACKAGE_DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY@") +endif(WIN32) set(DYNAMICEDT3D_LIBRARIES "@PACKAGE_DYNAMICEDT3D_LIB_DIR@/@DYNAMICEDT3D_LIBRARY@") @DYNAMICEDT3D_INCLUDE_TARGETS@ diff --git a/dynamicEDT3D/src/CMakeLists.txt b/dynamicEDT3D/src/CMakeLists.txt index 44645d88..36ac8628 100644 --- a/dynamicEDT3D/src/CMakeLists.txt +++ b/dynamicEDT3D/src/CMakeLists.txt @@ -2,35 +2,49 @@ SET( dynamicEDT3D_SRCS dynamicEDT3D.cpp ) -add_library(dynamicedt3d SHARED ${dynamicEDT3D_SRCS}) -set_target_properties(dynamicedt3d PROPERTIES - VERSION ${DYNAMICEDT3D_VERSION} - SOVERSION ${DYNAMICEDT3D_SOVERSION} -) -target_link_libraries(dynamicedt3d ${OCTOMAP_LIBRARIES}) +# Source code not set up for shared symbol export under Windows. Skip shared build. +IF(WIN32) + set(SKIP_SHARED YES) +ENDIF(WIN32) + +IF(NOT SKIP_SHARED) + add_library(dynamicedt3d SHARED ${dynamicEDT3D_SRCS}) + set_target_properties(dynamicedt3d PROPERTIES + VERSION ${DYNAMICEDT3D_VERSION} + SOVERSION ${DYNAMICEDT3D_SOVERSION} + ) + target_link_libraries(dynamicedt3d ${OCTOMAP_LIBRARIES}) + + set(DYNAMICEDT3D_TARGETS dynamicedt3d dynamicedt3d-static) +ELSE(NOT SKIP_SHARED) + set(DYNAMICEDT3D_TARGETS dynamicedt3d-static) +ENDIF(NOT SKIP_SHARED) add_library(dynamicedt3d-static STATIC ${dynamicEDT3D_SRCS}) target_link_libraries(dynamicedt3d-static ${OCTOMAP_LIBRARIES}) SET_TARGET_PROPERTIES(dynamicedt3d-static PROPERTIES OUTPUT_NAME "dynamicedt3d") +SET_TARGET_PROPERTIES(dynamicedt3d-static PROPERTIES OUTPUT_NAME_DEBUG "dynamicedt3dd") if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/dynamicEDT3D") file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/dynamicEDT3D") endif() -export(TARGETS dynamicedt3d dynamicedt3d-static +export(TARGETS ${DYNAMICEDT3D_TARGETS} FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/dynamicEDT3D/dynamicEDT3DTargets.cmake") # directly depend on the octomap library target when building the # complete distribution, so it it recompiled as needed if (CMAKE_PROJECT_NAME STREQUAL "octomap-distribution") ADD_DEPENDENCIES(dynamicedt3d-static octomap-static) - ADD_DEPENDENCIES(dynamicedt3d octomap) + IF(NOT SKIP_SHARED) + ADD_DEPENDENCIES(dynamicedt3d octomap) + endif(NOT SKIP_SHARED) endif() ADD_SUBDIRECTORY(examples) -install(TARGETS dynamicedt3d dynamicedt3d-static +install(TARGETS ${DYNAMICEDT3D_TARGETS} EXPORT dynamicEDT3DTargets INCLUDES DESTINATION include ${INSTALL_TARGETS_DEFAULT_ARGS} diff --git a/dynamicEDT3D/src/examples/CMakeLists.txt b/dynamicEDT3D/src/examples/CMakeLists.txt index 01473157..8716e9d2 100644 --- a/dynamicEDT3D/src/examples/CMakeLists.txt +++ b/dynamicEDT3D/src/examples/CMakeLists.txt @@ -1,8 +1,14 @@ +set(DYNAMICEDT3D_LINK dynamicedt3d) +IF(WIN32) + # Windows build not setup for dynamic library export. Use static library. + set(DYNAMICEDT3D_LINK dynamicedt3d-static) +ENDIF(WIN32) + add_executable(exampleEDT3D exampleEDT3D.cpp) -target_link_libraries(exampleEDT3D dynamicedt3d) +target_link_libraries(exampleEDT3D ${DYNAMICEDT3D_LINK}) add_executable(exampleEDTOctomap exampleEDTOctomap.cpp) -target_link_libraries(exampleEDTOctomap dynamicedt3d) +target_link_libraries(exampleEDTOctomap ${DYNAMICEDT3D_LINK}) add_executable(exampleEDTOctomapStamped exampleEDTOctomapStamped.cpp) -target_link_libraries(exampleEDTOctomapStamped dynamicedt3d) \ No newline at end of file +target_link_libraries(exampleEDTOctomapStamped ${DYNAMICEDT3D_LINK}) \ No newline at end of file diff --git a/octomap/CMakeLists.txt b/octomap/CMakeLists.txt index 0f8887df..0e47bbd5 100644 --- a/octomap/CMakeLists.txt +++ b/octomap/CMakeLists.txt @@ -96,6 +96,12 @@ IF(WIN32) set(OCTOMATH_LIBRARY "${CMAKE_IMPORT_LIBRARY_PREFIX}octomath${CMAKE_IMPORT_LIBRARY_SUFFIX}" ) + set(OCTOMAP_LIBRARY_DEBUG + "${CMAKE_IMPORT_LIBRARY_PREFIX}octomapd${CMAKE_IMPORT_LIBRARY_SUFFIX}" + ) + set(OCTOMATH_LIBRARY_DEBUG + "${CMAKE_IMPORT_LIBRARY_PREFIX}octomathd${CMAKE_IMPORT_LIBRARY_SUFFIX}" + ) ELSE() set(OCTOMAP_LIBRARY "${CMAKE_SHARED_LIBRARY_PREFIX}octomap${CMAKE_SHARED_LIBRARY_SUFFIX}" diff --git a/octomap/octomap-config.cmake.in b/octomap/octomap-config.cmake.in index e0ffc5d6..3cde1b9a 100644 --- a/octomap/octomap-config.cmake.in +++ b/octomap/octomap-config.cmake.in @@ -34,9 +34,18 @@ set_and_check(OCTOMAP_INCLUDE_DIRS "@PACKAGE_OCTOMAP_INCLUDE_DIRS@") set_and_check(OCTOMAP_LIBRARY_DIRS "@PACKAGE_OCTOMAP_LIB_DIR@") # Set library names -set(OCTOMAP_LIBRARIES - "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMAP_LIBRARY@" - "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMATH_LIBRARY@" -) +if(WIN32) + set(OCTOMAP_LIBRARIES + optimized "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMAP_LIBRARY@" + optimized "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMATH_LIBRARY@" + debug "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMAP_LIBRARY_DEBUG@" + debug "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMATH_LIBRARY_DEBUG@" + ) +elseif(WIN32) + set(OCTOMAP_LIBRARIES + "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMAP_LIBRARY@" + "@PACKAGE_OCTOMAP_LIB_DIR@/@OCTOMATH_LIBRARY@" + ) +endif(WIN32) @OCTOMAP_INCLUDE_TARGETS@ diff --git a/octomap/src/CMakeLists.txt b/octomap/src/CMakeLists.txt index 9ac6dcbf..aa834b45 100644 --- a/octomap/src/CMakeLists.txt +++ b/octomap/src/CMakeLists.txt @@ -10,63 +10,77 @@ SET (octomap_SRCS ColorOcTree.cpp ) +# Source code not set up for shared symbol export under Windows. Skip shared build. +set(OCTOMAP_LINK octomap octomath) +IF(WIN32) + set(SKIP_SHARED YES) + set(OCTOMAP_LINK octomap-static octomath-static) +ENDIF(WIN32) + # dynamic and static libs, see CMake FAQ: -ADD_LIBRARY( octomap SHARED ${octomap_SRCS}) -set_target_properties( octomap PROPERTIES - VERSION ${OCTOMAP_VERSION} - SOVERSION ${OCTOMAP_SOVERSION} -) -ADD_LIBRARY( octomap-static STATIC ${octomap_SRCS}) -SET_TARGET_PROPERTIES(octomap-static PROPERTIES OUTPUT_NAME "octomap") +IF(NOT SKIP_SHARED) + ADD_LIBRARY( octomap SHARED ${octomap_SRCS}) + set_target_properties( octomap PROPERTIES + VERSION ${OCTOMAP_VERSION} + SOVERSION ${OCTOMAP_SOVERSION} + ) + + TARGET_LINK_LIBRARIES(octomap octomath) -TARGET_LINK_LIBRARIES(octomap octomath) + set(OCTOMAP_TARGETS octomap octomap-static) +ELSE(NOT SKIP_SHARED) + set(OCTOMAP_TARGETS octomap-static) +ENDIF(NOT SKIP_SHARED) +ADD_LIBRARY( octomap-static STATIC ${octomap_SRCS}) +SET_TARGET_PROPERTIES(octomap-static PROPERTIES OUTPUT_NAME "octomap") +SET_TARGET_PROPERTIES(octomap-static PROPERTIES OUTPUT_NAME_DEBUG "octomapd") if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap") file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap") endif() -export(TARGETS octomap octomap-static +export(TARGETS ${OCTOMAP_TARGETS} APPEND FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap/octomap-targets.cmake") ADD_SUBDIRECTORY( testing ) ADD_EXECUTABLE(graph2tree graph2tree.cpp) -TARGET_LINK_LIBRARIES(graph2tree octomap) +TARGET_LINK_LIBRARIES(graph2tree ${OCTOMAP_LINK}) ADD_EXECUTABLE(log2graph log2graph.cpp) -TARGET_LINK_LIBRARIES(log2graph octomap) +TARGET_LINK_LIBRARIES(log2graph ${OCTOMAP_LINK}) ADD_EXECUTABLE(binvox2bt binvox2bt.cpp) -TARGET_LINK_LIBRARIES(binvox2bt octomap) +TARGET_LINK_LIBRARIES(binvox2bt ${OCTOMAP_LINK}) ADD_EXECUTABLE(bt2vrml bt2vrml.cpp) -TARGET_LINK_LIBRARIES(bt2vrml octomap) +TARGET_LINK_LIBRARIES(bt2vrml ${OCTOMAP_LINK}) ADD_EXECUTABLE(edit_octree edit_octree.cpp) -TARGET_LINK_LIBRARIES(edit_octree octomap) +TARGET_LINK_LIBRARIES(edit_octree ${OCTOMAP_LINK}) ADD_EXECUTABLE(convert_octree convert_octree.cpp) -TARGET_LINK_LIBRARIES(convert_octree octomap) +TARGET_LINK_LIBRARIES(convert_octree ${OCTOMAP_LINK}) ADD_EXECUTABLE(eval_octree_accuracy eval_octree_accuracy.cpp) -TARGET_LINK_LIBRARIES(eval_octree_accuracy octomap) +TARGET_LINK_LIBRARIES(eval_octree_accuracy ${OCTOMAP_LINK}) ADD_EXECUTABLE(compare_octrees compare_octrees.cpp) -TARGET_LINK_LIBRARIES(compare_octrees octomap) +TARGET_LINK_LIBRARIES(compare_octrees ${OCTOMAP_LINK}) ADD_EXECUTABLE(simple_example simple_example.cpp) -TARGET_LINK_LIBRARIES(simple_example octomap) +TARGET_LINK_LIBRARIES(simple_example ${OCTOMAP_LINK}) ADD_EXECUTABLE(normals_example normals_example.cpp) -TARGET_LINK_LIBRARIES(normals_example octomap) +TARGET_LINK_LIBRARIES(normals_example ${OCTOMAP_LINK}) ADD_EXECUTABLE(intersection_example intersection_example.cpp) -TARGET_LINK_LIBRARIES(intersection_example octomap) +TARGET_LINK_LIBRARIES(intersection_example ${OCTOMAP_LINK}) ADD_EXECUTABLE(octree2pointcloud octree2pointcloud.cpp) -TARGET_LINK_LIBRARIES(octree2pointcloud octomap) +TARGET_LINK_LIBRARIES(octree2pointcloud ${OCTOMAP_LINK}) -install(TARGETS octomap octomap-static +install(TARGETS ${OCTOMAP_TARGETS} EXPORT octomap-targets INCLUDES DESTINATION include ${INSTALL_TARGETS_DEFAULT_ARGS} diff --git a/octomap/src/math/CMakeLists.txt b/octomap/src/math/CMakeLists.txt index 22127adb..f01b4308 100644 --- a/octomap/src/math/CMakeLists.txt +++ b/octomap/src/math/CMakeLists.txt @@ -5,26 +5,38 @@ SET (octomath_SRCS ) -ADD_LIBRARY( octomath SHARED ${octomath_SRCS}) +# Source code not set up for shared symbol export under Windows. Skip shared build. +IF(WIN32) + set(SKIP_SHARED YES) +ENDIF(WIN32) -SET_TARGET_PROPERTIES( octomath PROPERTIES - VERSION ${OCTOMAP_VERSION} - SOVERSION ${OCTOMAP_SOVERSION} - INSTALL_NAME_DIR ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} # this seems to be necessary for MacOS X -) -# INSTALL_NAME_DIR seems to be necessary for MacOS X +IF(NOT SKIP_SHARED) + ADD_LIBRARY( octomath SHARED ${octomath_SRCS}) + + SET_TARGET_PROPERTIES( octomath PROPERTIES + VERSION ${OCTOMAP_VERSION} + SOVERSION ${OCTOMAP_SOVERSION} + INSTALL_NAME_DIR ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} # this seems to be necessary for MacOS X + ) + # INSTALL_NAME_DIR seems to be necessary for MacOS X + + set(OCTOMATH_TARGETS octomath octomath-static) +ELSE(NOT SKIP_SHARED) + set(OCTOMATH_TARGETS octomath-static) +ENDIF(NOT SKIP_SHARED) ADD_LIBRARY( octomath-static STATIC ${octomath_SRCS}) SET_TARGET_PROPERTIES(octomath-static PROPERTIES OUTPUT_NAME "octomath") +SET_TARGET_PROPERTIES(octomath-static PROPERTIES OUTPUT_NAME_DEBUG "octomathd") if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap") file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap") endif() -export(TARGETS octomath octomath-static +export(TARGETS ${OCTOMATH_TARGETS} APPEND FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octomap/octomap-targets.cmake") -install(TARGETS octomath octomath-static +install(TARGETS ${OCTOMATH_TARGETS} EXPORT octomap-targets INCLUDES DESTINATION include ${INSTALL_TARGETS_DEFAULT_ARGS} diff --git a/octomap/src/testing/CMakeLists.txt b/octomap/src/testing/CMakeLists.txt index b85ae3b5..922117c0 100644 --- a/octomap/src/testing/CMakeLists.txt +++ b/octomap/src/testing/CMakeLists.txt @@ -1,36 +1,39 @@ +IF(NOT DEFINED OCTOMAP_LINK) + set(OCTOMAP_LINK octomap octomath) +ENDIF(NOT DEFINED OCTOMAP_LINK) if(BUILD_TESTING) ADD_EXECUTABLE(test_raycasting test_raycasting.cpp) - TARGET_LINK_LIBRARIES(test_raycasting octomap) + TARGET_LINK_LIBRARIES(test_raycasting ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_iterators test_iterators.cpp) - TARGET_LINK_LIBRARIES(test_iterators octomap) + TARGET_LINK_LIBRARIES(test_iterators ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_io test_io.cpp) - TARGET_LINK_LIBRARIES(test_io octomap) + TARGET_LINK_LIBRARIES(test_io ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_changedkeys test_changedkeys.cpp) - TARGET_LINK_LIBRARIES(test_changedkeys octomap) + TARGET_LINK_LIBRARIES(test_changedkeys ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_scans test_scans.cpp) - TARGET_LINK_LIBRARIES(test_scans octomap) + TARGET_LINK_LIBRARIES(test_scans ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_color_tree test_color_tree.cpp) - TARGET_LINK_LIBRARIES(test_color_tree octomap) + TARGET_LINK_LIBRARIES(test_color_tree ${OCTOMAP_LINK}) ADD_EXECUTABLE(color_tree_histogram color_tree_histogram.cpp) - TARGET_LINK_LIBRARIES(color_tree_histogram octomap) + TARGET_LINK_LIBRARIES(color_tree_histogram ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_mapcollection test_mapcollection.cpp) - TARGET_LINK_LIBRARIES(test_mapcollection octomap octomath) + TARGET_LINK_LIBRARIES(test_mapcollection ${OCTOMAP_LINK}) ADD_EXECUTABLE(test_pruning test_pruning.cpp) - TARGET_LINK_LIBRARIES(test_pruning octomap octomath) + TARGET_LINK_LIBRARIES(test_pruning ${OCTOMAP_LINK}) # CTest tests below ADD_EXECUTABLE(unit_tests unit_tests.cpp) - TARGET_LINK_LIBRARIES(unit_tests octomap) + TARGET_LINK_LIBRARIES(unit_tests ${OCTOMAP_LINK}) ADD_TEST (NAME MathVector COMMAND unit_tests MathVector ) ADD_TEST (NAME MathPose COMMAND unit_tests MathPose ) diff --git a/octovis/CMakeLists.txt b/octovis/CMakeLists.txt index 23f01deb..84cd83cc 100644 --- a/octovis/CMakeLists.txt +++ b/octovis/CMakeLists.txt @@ -99,6 +99,9 @@ IF(BUILD_VIEWER) set(OCTOVIS_LIBRARY "${CMAKE_IMPORT_LIBRARY_PREFIX}octovis${CMAKE_IMPORT_LIBRARY_SUFFIX}" ) + set(OCTOVIS_LIBRARY_DEBUG + "${CMAKE_IMPORT_LIBRARY_PREFIX}octovisd${CMAKE_IMPORT_LIBRARY_SUFFIX}" + ) ELSE() set(OCTOVIS_LIBRARY "${CMAKE_SHARED_LIBRARY_PREFIX}octovis${CMAKE_SHARED_LIBRARY_SUFFIX}" diff --git a/octovis/CMakeLists_src.txt b/octovis/CMakeLists_src.txt index 8227d984..fcedd292 100644 --- a/octovis/CMakeLists_src.txt +++ b/octovis/CMakeLists_src.txt @@ -68,30 +68,47 @@ QT4_WRAP_UI(viewer_UIS_H ${viewer_UIS}) # the UI file won't be wrapped! include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR}) +# Source code not set up for shared symbol export under Windows. Skip shared build. +IF(WIN32) + set(SKIP_SHARED YES) +ENDIF(WIN32) -# Library target + +# Library target add_library(octovis-static STATIC ${viewerlib_SRCS}) target_link_libraries(octovis-static) set_target_properties(octovis-static PROPERTIES OUTPUT_NAME octovis) +set_target_properties(octovis-static PROPERTIES OUTPUT_NAME_DEBUG octovisd) + +if(NOT SKIP_SHARED) + add_library(octovis-shared SHARED ${viewerlib_SRCS}) + target_link_libraries(octovis-shared + ${OPENGL_gl_LIBRARY} + ${OPENGL_glu_LIBRARY} + ${OCTOMAP_LIBRARIES} + ${QGLViewer_LIBRARIES} + ${QT_LIBRARIES} + ) + set_target_properties(octovis-shared PROPERTIES + OUTPUT_NAME octovis + VERSION ${OCTOVIS_VERSION} + SOVERSION ${OCTOVIS_SOVERSION} + ) -add_library(octovis-shared SHARED ${viewerlib_SRCS}) -target_link_libraries(octovis-shared - ${OPENGL_gl_LIBRARY} - ${OPENGL_glu_LIBRARY} - ${OCTOMAP_LIBRARIES} - ${QGLViewer_LIBRARIES} -) -set_target_properties(octovis-shared PROPERTIES - OUTPUT_NAME octovis - VERSION ${OCTOVIS_VERSION} - SOVERSION ${OCTOVIS_SOVERSION} -) + set(OCTOVIS_TARGETS octovis octovis-static octovis-shared) +else(NOT SKIP_SHARED) + set(OCTOVIS_TARGETS octovis octovis-static) +endif(NOT SKIP_SHARED) # directly depend on the octomap library target when building the # complete distribution, so it is recompiled as needed if (CMAKE_PROJECT_NAME STREQUAL "octomap-distribution") - ADD_DEPENDENCIES(octovis-static octomap-static) - ADD_DEPENDENCIES(octovis-shared octomap) + if(NOT SKIP_SHARED) + ADD_DEPENDENCIES(octovis-static octomap-static) + ADD_DEPENDENCIES(octovis-shared octomap) + else(NOTSKIP_SHAREDWIN32) + ADD_DEPENDENCIES(octovis-static octomap-static) + endif(NOT SKIP_SHARED) endif() @@ -99,12 +116,21 @@ endif() # If this is NOT done, then the ui_*.h files will not be generated add_executable(octovis ${viewer_SRCS} ${viewer_UIS_H} ${viewer_MOC_SRCS} ${viewer_RES}) -target_link_libraries(octovis -# ${QGLViewer_LIBRARIES} - ${QT_LIBRARIES} - ${OCTOMAP_LIBRARIES} - octovis-shared -) +if(NOT SKIP_SHARED) + target_link_libraries(octovis + # ${QGLViewer_LIBRARIES} + ${QT_LIBRARIES} + ${OCTOMAP_LIBRARIES} + octovis-shared + ) +else(NOT SKIP_SHARED) + target_link_libraries(octovis + ${QGLViewer_LIBRARIES} + ${QT_LIBRARIES} + ${OCTOMAP_LIBRARIES} + octovis-static + ) +endif(NOT SKIP_SHARED) # special handling of MacOS X: IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") @@ -117,10 +143,10 @@ if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis") file(MAKE_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis") endif() -export(TARGETS octovis octovis-static octovis-shared +export(TARGETS ${OCTOVIS_TARGETS} FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-targets.cmake") -install(TARGETS octovis octovis-static octovis-shared +install(TARGETS ${OCTOVIS_TARGETS} EXPORT octovis-targets INCLUDES DESTINATION include ${INSTALL_TARGETS_DEFAULT_ARGS} diff --git a/octovis/CMakeModules/FindQGLViewer.cmake b/octovis/CMakeModules/FindQGLViewer.cmake index 752002b9..74074dc9 100644 --- a/octovis/CMakeModules/FindQGLViewer.cmake +++ b/octovis/CMakeModules/FindQGLViewer.cmake @@ -25,6 +25,7 @@ FIND_PATH( QGLViewer_INCLUDE_DIR qglviewer.h FIND_LIBRARY( QGLViewer_LIBRARY_DIR_UBUNTU NAMES qglviewer-qt4 QGLViewer-qt4) FIND_LIBRARY( QGLViewer_LIBRARY_DIR_WINDOWS QGLViewer2 ${QGLVIEWER_BASE_DIR}) +FIND_LIBRARY( QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG QGLViewerd2 ${QGLVIEWER_BASE_DIR}) FIND_LIBRARY( QGLViewer_LIBRARY_DIR_OTHER QGLViewer ${QGLVIEWER_BASE_DIR}) SET( BUILD_LIB_FROM_SOURCE 0) @@ -38,7 +39,12 @@ IF( QGLViewer_INCLUDE_DIR ) SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) ELSEIF(QGLViewer_LIBRARY_DIR_WINDOWS) MESSAGE(STATUS "QGLViewer2 found in ${QGLViewer_LIBRARY_DIR_WINDOWS}") - SET( QGLViewer_LIBRARIES ${QGLViewer_LIBRARY_DIR_WINDOWS}) + IF(QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG) + MESSAGE(STATUS "QGLViewer2d found in ${QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG}") + SET( QGLViewer_LIBRARIES optimized ${QGLViewer_LIBRARY_DIR_WINDOWS} debug ${QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG}) + ELSE(QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG) + SET( QGLViewer_LIBRARIES ${QGLViewer_LIBRARY_DIR_WINDOWS}) + ENDIF(QGLViewer_LIBRARY_DIR_WINDOWS_DEBUG) SET( QGLViewer_FOUND 1 CACHE BOOL "Do we have QGLViewer?" FORCE ) ELSEIF(QGLViewer_LIBRARY_DIR_OTHER) MESSAGE(STATUS "QGLViewer found in ${QGLViewer_LIBRARY_DIR_OTHER}") diff --git a/octovis/octovis-config.cmake.in b/octovis/octovis-config.cmake.in index 3add82ee..9db57040 100644 --- a/octovis/octovis-config.cmake.in +++ b/octovis/octovis-config.cmake.in @@ -18,10 +18,19 @@ set_and_check(OCTOVIS_INCLUDE_DIRS "@PACKAGE_OCTOVIS_INCLUDE_DIRS@" "@QGLViewer_ set_and_check(OCTOVIS_LIBRARY_DIRS "@PACKAGE_OCTOVIS_LIB_DIR@" "@QGLViewer_LIBRARY_DIR@") # Set library names as absolute paths: -set(OCTOVIS_LIBRARIES - "@QGLViewer_LIBRARIES@" - "@QT_LIBRARIES@" - "@PACKAGE_OCTOVIS_LIB_DIR@/@OCTOVIS_LIBRARY@" -) +if(WIN32) + set(OCTOVIS_LIBRARIES + "@QGLViewer_LIBRARIES@" + "@QT_LIBRARIES@" + optimized "@PACKAGE_OCTOVIS_LIB_DIR@/@OCTOVIS_LIBRARY@" + debug "@PACKAGE_OCTOVIS_LIB_DIR@/@OCTOVIS_LIBRARY_DEBUG@" + ) +else(WIN32) + set(OCTOVIS_LIBRARIES + "@QGLViewer_LIBRARIES@" + "@QT_LIBRARIES@" + "@PACKAGE_OCTOVIS_LIB_DIR@/@OCTOVIS_LIBRARY@" + ) +endif(WIN32) @OCTOVIS_INCLUDE_TARGETS@