-
Notifications
You must be signed in to change notification settings - Fork 662
/
CMakeLists.txt
170 lines (139 loc) · 6.01 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
CMAKE_MINIMUM_REQUIRED(VERSION 3.0.2)
PROJECT( octovis )
include(CTest)
include(GNUInstallDirs)
# # version (e.g. for packaging)
set(OCTOVIS_MAJOR_VERSION 1)
set(OCTOVIS_MINOR_VERSION 9)
set(OCTOVIS_PATCH_VERSION 8)
set(OCTOVIS_VERSION ${OCTOVIS_MAJOR_VERSION}.${OCTOVIS_MINOR_VERSION}.${OCTOVIS_PATCH_VERSION})
set(OCTOVIS_SOVERSION ${OCTOVIS_MAJOR_VERSION}.${OCTOVIS_MINOR_VERSION})
# get rid of a useless warning:
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 )
# We need the main octomap library to link against (same version as octovis)
# Look at parent directory by default, in case the complete distribution
# (octomap & octovis together) is built.
#
# Otherwise you need to export octomap_DIR to the directory containing
# the file octomap-config.cmake
find_package(octomap ${OCTOVIS_MAJOR_VERSION}.${OCTOVIS_MINOR_VERSION} REQUIRED
HINTS ${CMAKE_SOURCE_DIR}/lib/cmake/octomap
${CMAKE_SOURCE_DIR}/../octomap/lib/cmake/octomap
)
MESSAGE(STATUS "Found octomap version: " ${octomap_VERSION})
INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OCTOMAP_INCLUDE_DIRS})
# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
export(PACKAGE octovis)
set(INSTALL_TARGETS_DEFAULT_ARGS
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
# Builds the "octovis" viewer based on OpenGL and
# libQGLViewer, if dependencies available
SET( BUILD_VIEWER 0)
option(OCTOVIS_QT5 "Link Octovis against Qt5?" ON)
# Look for required libraries:
FIND_PACKAGE(OpenGL)
if(NOT OCTOVIS_QT5)
FIND_PACKAGE(Qt4)
endif(NOT OCTOVIS_QT5)
IF (OpenGL-NOTFOUND OR Qt4-NOTFOUND)
MESSAGE ( "OpenGL and QT4 are required for octovis but could not be found.")
ELSE()
FIND_PACKAGE(QGLViewer)
IF(QGLViewer_FOUND)
SET( BUILD_VIEWER 1)
ELSE()
MESSAGE ( "\n")
MESSAGE ( "libQGLViewer could not be found or generated.")
ENDIF()
ENDIF()
IF(BUILD_VIEWER)
MESSAGE(STATUS "\n")
MESSAGE(STATUS "viewer octovis will be built")
set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include")
INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
INCLUDE( CMakeLists_src.txt )
# Create an octovis-config.cmake file for the use from the build tree
set(OCTOVIS_INCLUDE_DIRS "${INCLUDE_DIRS}")
set(OCTOVIS_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(OCTOVIS_LIBRARY
"${CMAKE_IMPORT_LIBRARY_PREFIX}octovis${CMAKE_IMPORT_LIBRARY_SUFFIX}"
)
ELSE()
set(OCTOVIS_LIBRARY
"${CMAKE_SHARED_LIBRARY_PREFIX}octovis${CMAKE_SHARED_LIBRARY_SUFFIX}"
)
ENDIF()
include(CMakePackageConfigHelpers)
CONFIGURE_PACKAGE_CONFIG_FILE(
octovis-config.cmake.in
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config.cmake"
PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/octovis)
WRITE_BASIC_PACKAGE_VERSION_FILE(
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/octovis/octovis-config-version.cmake"
VERSION ${OCTOVIS_VERSION}
COMPATIBILITY AnyNewerVersion)
# not used right now (export depends?)
#set(OCTOMAP_CMAKE_DIR "${PROJECT_BINARY_DIR}")
# Create a octovis-config.cmake file for the use from the install tree
# and install it
set(OCTOVIS_INCLUDE_DIRS "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
set(OCTOVIS_LIB_DIR "${CMAKE_INSTALL_FULL_LIBDIR}")
#set(OCTOMAP_CMAKE_DIR "${INSTALL_DATA_DIR}/FooBar/CMake")
set(OCTOVIS_INCLUDE_TARGETS
"include(\${CMAKE_CURRENT_LIST_DIR}/octovis-targets.cmake)")
CONFIGURE_PACKAGE_CONFIG_FILE(
octovis-config.cmake.in
"${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake"
PATH_VARS OCTOVIS_INCLUDE_DIRS OCTOVIS_LIB_DIR
INSTALL_DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/octovis")
WRITE_BASIC_PACKAGE_VERSION_FILE(
"${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake"
VERSION ${OCTOVIS_VERSION}
COMPATIBILITY AnyNewerVersion)
install(FILES
"${PROJECT_BINARY_DIR}/InstallFiles/octovis-config.cmake"
"${PROJECT_BINARY_DIR}/InstallFiles/octovis-config-version.cmake"
DESTINATION "${CMAKE_INSTALL_DATADIR}/octovis")
# #installation:
# # store all header files to install:
file(GLOB octovis_HDRS *.h *.hxx *.hpp)
install(FILES ${octovis_HDRS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/octovis")
# Install catkin package.xml
install(FILES package.xml DESTINATION "${CMAKE_INSTALL_DATADIR}/octovis")
# 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)
ELSE()
MESSAGE ( "Unfortunately, the viewer (octovis) can not be built because some requirements are missing.")
MESSAGE ( "This will not affect the compilation of the stand-alone library and tools (octomap)")
MESSAGE ( "See README.txt or http://octomap.sf.net for further information.\n")
ENDIF()