Skip to content
27 changes: 14 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
PROJECT( octomap-distribution )
cmake_minimum_required(VERSION 3.10...4.1)
project(
octomap-distribution
VERSION 1.10.0
LANGUAGES NONE
)

ENABLE_TESTING() # enable CTest environment of subprojects
set(CMAKE_POSITION_INDEPENDENT_CODE ON) # enables -fPIC in applicable compilers (required to avoid link errors in some cases)
include(CTest)

option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(BUILD_OCTOVIS_SUBPROJECT "Build targets from subproject octovis" ON)
option(BUILD_DYNAMICETD3D_SUBPROJECT "Build targets from subproject dynamicEDT3D" ON)
option(OCTOVIS_QT6 "Link Octovis against Qt6?" ON)

set(CMAKE_CXX_STANDARD 11)

ADD_SUBDIRECTORY( octomap )
option(BUILD_DYNAMICETD3D_SUBPROJECT
"Build targets from subproject dynamicEDT3D" ON
)

add_subdirectory(octomap)
if(BUILD_OCTOVIS_SUBPROJECT)
ADD_SUBDIRECTORY( octovis )
add_subdirectory(octovis)
endif()

if(BUILD_DYNAMICETD3D_SUBPROJECT)
ADD_SUBDIRECTORY( dynamicEDT3D )
add_subdirectory(dynamicEDT3D)
endif()
268 changes: 115 additions & 153 deletions dynamicEDT3D/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,177 +1,139 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
PROJECT(dynamicEDT3D)

include(CTest)
include(GNUInstallDirs)
cmake_minimum_required(VERSION 3.10...4.1)
project(
dynamicEDT3D
VERSION 1.10.0
LANGUAGES CXX
)

# version (e.g. for packaging)
set(DYNAMICEDT3D_MAJOR_VERSION 1)
set(DYNAMICEDT3D_MINOR_VERSION 10)
set(DYNAMICEDT3D_PATCH_VERSION 0)
set(DYNAMICEDT3D_VERSION ${DYNAMICEDT3D_MAJOR_VERSION}.${DYNAMICEDT3D_MINOR_VERSION}.${DYNAMICEDT3D_PATCH_VERSION})
set(DYNAMICEDT3D_SOVERSION ${DYNAMICEDT3D_MAJOR_VERSION}.${DYNAMICEDT3D_MINOR_VERSION})

if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
if(POLICY CMP0042)
# Enable MACOSX_RPATH by default.
cmake_policy(SET CMP0042 NEW)
endif(POLICY CMP0042)
endif(COMMAND cmake_policy)

SET (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules")

# COMPILER SETTINGS (default: Release) and flags
INCLUDE(CompilerSettings)


# Set output directories for libraries and executables
SET( BASE_DIR ${CMAKE_SOURCE_DIR} )
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BASE_DIR}/lib )
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BASE_DIR}/lib )
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BASE_DIR}/bin )
# output dirs for multi-config builds (MSVC)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
STRING( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BASE_DIR}/lib )
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BASE_DIR}/lib )
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BASE_DIR}/bin )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include")
INCLUDE_DIRECTORIES(${INCLUDE_DIRS})

LINK_DIRECTORIES(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
option(DYNAMICEDT3D_BUILD_EXAMPLES "Build examples" ON)

# Installation
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)

set(INSTALL_TARGETS_DEFAULT_ARGS
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules")
include(CompilerSettings)
include(InstallPkgConfigFile)

find_package(octomap REQUIRED
HINTS ${CMAKE_SOURCE_DIR}/lib/cmake/octomap
${CMAKE_SOURCE_DIR}/../octomap/lib/cmake/octomap
# version (e.g. for packaging)
set(DYNAMICEDT3D_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
set(DYNAMICEDT3D_MINOR_VERSION ${PROJECT_VERSION_MINOR})
set(DYNAMICEDT3D_PATCH_VERSION ${PROJECT_VERSION_PATCH})
set(DYNAMICEDT3D_VERSION ${PROJECT_VERSION})
set(DYNAMICEDT3D_SOVERSION
"${DYNAMICEDT3D_MAJOR_VERSION}.${DYNAMICEDT3D_MINOR_VERSION}"
)
MESSAGE(STATUS "Found octomap version: " ${octomap_VERSION})
MESSAGE(STATUS "octomap libraries: ${OCTOMAP_LIBRARIES}")

INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OCTOMAP_INCLUDE_DIRS})

ADD_SUBDIRECTORY(src)
if(NOT TARGET octomap::octomap)
find_package(octomap "${DYNAMICEDT3D_VERSION}" REQUIRED)
endif()

set(DYNAMICEDT3D_FIND_DEPENDENCIES
"include(CMakeFindDependencyMacro)\nfind_dependency(octomap ${DYNAMICEDT3D_VERSION})"
)

file(GLOB dynamicEDT3D_HDRS ${PROJECT_SOURCE_DIR}/include/dynamicEDT3D/*.h ${PROJECT_SOURCE_DIR}/include/dynamicEDT3D/*.hxx)
install(FILES ${dynamicEDT3D_HDRS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/dynamicEDT3D")
set(dynamicEDT3D_SOURCES src/dynamicEDT3D.cpp)

# Install catkin package.xml, attention package.xml names the catkin package "dynamic_edt_3d", so this is also the location where it needs to be installed to (and not "dynamicEDT3D")
install(FILES package.xml DESTINATION "${CMAKE_INSTALL_DATADIR}/dynamic_edt_3d")
add_library(dynamicEDT3D ${dynamicEDT3D_SOURCES})
target_compile_features(dynamicEDT3D PUBLIC cxx_std_11)
target_include_directories(
dynamicEDT3D PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(
dynamicEDT3D
PROPERTIES VERSION "${DYNAMICEDT3D_VERSION}"
SOVERSION "${DYNAMICEDT3D_SOVERSION}"
OUTPUT_NAME "dynamicedt3d"
)
target_link_libraries(dynamicEDT3D PUBLIC octomap::octomap)
add_library(octomap::dynamicEDT3D ALIAS dynamicEDT3D)

# Allows Colcon to find non-Ament packages when using workspace underlays
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME} "")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME} DESTINATION share/ament_index/resource_index/packages)
# Examples
if(DYNAMICEDT3D_BUILD_EXAMPLES)
add_executable(exampleEDT3D src/examples/exampleEDT3D.cpp)
target_link_libraries(exampleEDT3D PRIVATE dynamicEDT3D)

#TODO: this conflicts with the octomap uninstall
#it is not only a target name problem, also both will use the same manifest file
#in the same binary directory
if(NOT TARGET uninstall)
configure_file(
"${PROJECT_SOURCE_DIR}/CMakeModules/CMakeUninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
add_executable(exampleEDTOctomap src/examples/exampleEDTOctomap.cpp)
target_link_libraries(exampleEDTOctomap PRIVATE dynamicEDT3D)

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
add_executable(
exampleEDTOctomapStamped src/examples/exampleEDTOctomapStamped.cpp
)
target_link_libraries(exampleEDTOctomapStamped PRIVATE dynamicEDT3D)
endif()

# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
# Export build tree
configure_package_config_file(
dynamicedt3d-config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/dynamicedt3d-config.cmake"
INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/dynamicedt3d-config-version.cmake"
VERSION ${DYNAMICEDT3D_VERSION}
COMPATIBILITY SameMinorVersion
)
export(
TARGETS dynamicEDT3D
NAMESPACE octomap::
FILE "${CMAKE_CURRENT_BINARY_DIR}/dynamicedt3d-targets.cmake"
)
export(PACKAGE dynamicEDT3D)

# Create a dynamicEDT3DConfig.cmake file for the use from the build tree
set(DYNAMICEDT3D_INCLUDE_DIRS "${INCLUDE_DIRS}")
set(DYNAMICEDT3D_LIB_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
# Set library names as absolute paths
# Windows, spec. MSVC requires the .lib suffix for imported libs
IF(WIN32)
set(DYNAMICEDT3D_LIBRARY
"${CMAKE_IMPORT_LIBRARY_PREFIX}dynamicedt3d${CMAKE_IMPORT_LIBRARY_SUFFIX}"
)
ELSE()
set(DYNAMICEDT3D_LIBRARY
"${CMAKE_SHARED_LIBRARY_PREFIX}dynamicedt3d${CMAKE_SHARED_LIBRARY_SUFFIX}"
)
ENDIF()
# not used right now (export depends?)
#set(DYNEDT3D_CMAKE_DIR "${PROJECT_BINARY_DIR}")
include(CMakePackageConfigHelpers)
# Installation
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS dynamicEDT3D EXPORT dynamicedt3d-targets)
install(
EXPORT dynamicedt3d-targets
NAMESPACE octomap::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/dynamicEDT3D"
)
set(DYNAMICEDT3D_INCLUDE_DIRS "${CMAKE_INSTALL_INCLUDEDIR}")
set(DYNAMICEDT3D_LIBRARY_DIRS "${CMAKE_INSTALL_LIBDIR}")
configure_package_config_file(
dynamicedt3d-config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/InstallFiles/dynamicedt3d-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/dynamicEDT3D"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/InstallFiles/dynamicedt3d-config-version.cmake"
VERSION ${DYNAMICEDT3D_VERSION}
COMPATIBILITY SameMinorVersion
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/InstallFiles/dynamicedt3d-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/InstallFiles/dynamicedt3d-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/dynamicEDT3D"
)

CONFIGURE_PACKAGE_CONFIG_FILE(
dynamicEDT3DConfig.cmake.in
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/dynamicEDT3D/dynamicEDT3DConfig.cmake"
PATH_VARS DYNAMICEDT3D_INCLUDE_DIRS DYNAMICEDT3D_LIB_DIR
INSTALL_DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/dynamicEDT3D")

WRITE_BASIC_PACKAGE_VERSION_FILE(
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/dynamicEDT3D/dynamicEDT3DConfig-version.cmake"
VERSION ${DYNAMICEDT3D_VERSION}
COMPATIBILITY AnyNewerVersion)

# Install the export set for use with the install-tree
#install(EXPORT FooBarLibraryDepends DESTINATION
# "${INSTALL_DATA_DIR}/FooBar/CMake"
# COMPONENT dev)

# Create a dynamicEDT3DConfig.cmake file for the use from the install tree
# and install it
set(DYNAMICEDT3D_INCLUDE_DIRS "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
set(DYNAMICEDT3D_LIB_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
#set(DYNAMICEDT3D_CMAKE_DIR "${INSTALL_DATA_DIR}/FooBar/CMake")

set(DYNAMICEDT3D_INCLUDE_TARGETS
"include(\${CMAKE_CURRENT_LIST_DIR}/dynamicEDT3DTargets.cmake)")

CONFIGURE_PACKAGE_CONFIG_FILE(
dynamicEDT3DConfig.cmake.in
"${PROJECT_BINARY_DIR}/InstallFiles/dynamicEDT3DConfig.cmake"
PATH_VARS DYNAMICEDT3D_INCLUDE_DIRS DYNAMICEDT3D_LIB_DIR
INSTALL_DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/dynamicEDT3D")

WRITE_BASIC_PACKAGE_VERSION_FILE(
"${PROJECT_BINARY_DIR}/InstallFiles/dynamicEDT3DConfig-version.cmake"
VERSION ${DYNAMICEDT3D_VERSION}
COMPATIBILITY AnyNewerVersion)

install(FILES
"${PROJECT_BINARY_DIR}/InstallFiles/dynamicEDT3DConfig.cmake"
"${PROJECT_BINARY_DIR}/InstallFiles/dynamicEDT3DConfig-version.cmake"
DESTINATION "${CMAKE_INSTALL_DATADIR}/dynamicEDT3D")

# Write pkgconfig-file:
# ROS support
install(FILES package.xml DESTINATION "${CMAKE_INSTALL_DATADIR}/dynamicEDT3D")

# pkg-config support
include(InstallPkgConfigFile)
install_pkg_config_file(dynamicEDT3D
install_pkg_config_file(
dynamicEDT3D
CFLAGS
LIBS -ldynamicEDT3D
LIBS
-ldynamicedt3d
REQUIRES
VERSION ${DYNAMICEDT3D_VERSION})

octomap
VERSION
${DYNAMICEDT3D_VERSION}
)

# Documentation
FIND_PACKAGE(Doxygen)
IF(DOXYGEN_FOUND)
ADD_CUSTOM_TARGET(docs_dynamicEDT3D ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dynamicEDT3D.dox
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating documentation (Doxygen)...")
ENDIF(DOXYGEN_FOUND)
find_package(Doxygen QUIET)
if(DOXYGEN_FOUND)
add_custom_target(
docs_dynamicEDT3D
COMMAND ${DOXYGEN_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/dynamicEDT3D.dox
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating documentation (Doxygen)"
)
endif(DOXYGEN_FOUND)

# Needs to be last statement:
INCLUDE(CPackSettings)

# Finished:
MESSAGE (STATUS "\n")
MESSAGE (STATUS "Compile dynamicEDT3D using: make")
MESSAGE (STATUS "Install dynamicEDT3D using: make install")
MESSAGE (STATUS " (be sure to set the correct CMAKE_INSTALL_PREFIX before)")
MESSAGE (STATUS "Compile API-documentation using: make docs_dynamicEDT3D\n")
include(CPackSettings)
22 changes: 0 additions & 22 deletions dynamicEDT3D/CMakeModules/CMakeUninstall.cmake.in

This file was deleted.

Loading
Loading