-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
222 lines (189 loc) · 5.37 KB
/
CMakeLists.txt
File metadata and controls
222 lines (189 loc) · 5.37 KB
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
cmake_minimum_required(VERSION 3.8)
project(fast_lio)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_compile_options(-std=c++17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall")
add_definitions(-DROOT_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/\")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
message("Current CPU architecture: ${CMAKE_SYSTEM_PROCESSOR}")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
include(ProcessorCount)
ProcessorCount(N)
message("Processor number: ${N}")
if(N GREATER 4)
add_definitions(-DMP_EN)
add_definitions(-DMP_PROC_NUM=3)
message("core for MP: 3")
elseif(N GREATER 3)
add_definitions(-DMP_EN)
add_definitions(-DMP_PROC_NUM=2)
message("core for MP: 2")
else()
add_definitions(-DMP_PROC_NUM=1)
endif()
else()
add_definitions(-DMP_PROC_NUM=1)
endif()
find_package(OpenMP QUIET)
if(OpenMP_FOUND)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
endif()
find_package(PythonLibs REQUIRED)
find_path(MATPLOTLIB_CPP_INCLUDE_DIRS "matplotlibcpp.h")
# ROS dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(std_msgs REQUIRED)
find_package(std_srvs REQUIRED) # 这个find_package已经够了
find_package(visualization_msgs REQUIRED)
find_package(pcl_ros REQUIRED)
find_package(pcl_conversions REQUIRED)
find_package(rviz_common REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(pluginlib REQUIRED)
find_package(Qt5 REQUIRED COMPONENTS Widgets)
# Thirdparty libraries
find_package(Eigen3 REQUIRED)
find_package(PCL REQUIRED COMPONENTS common io filters)
message(STATUS "Eigen include dir: ${EIGEN3_INCLUDE_DIR}")
message(STATUS "PCL include dirs: ${PCL_INCLUDE_DIRS}")
# 包含Qt5
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# 首先包含项目目录
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}
)
set(dependencies
rclcpp
rclcpp_components
geometry_msgs
nav_msgs
sensor_msgs
std_msgs
std_srvs # 添加std_srvs到依赖列表
visualization_msgs
pcl_ros
pcl_conversions
)
# 1. RVIZ面板插件
add_library(rviz_panel SHARED
src/rviz_panel.cpp
include/rviz_panel.hpp
)
# 为rviz_panel设置包含目录
target_include_directories(rviz_panel PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}
${EIGEN3_INCLUDE_DIR}
${PCL_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
# 修正:使用ament_target_dependencies而不是直接链接std_srvs
# ROS2中服务包通常不提供::目标
ament_target_dependencies(rviz_panel
rclcpp
std_srvs # 这里会自动处理std_srvs的链接
rviz_common
pluginlib
Qt5Widgets # 添加Qt5依赖
)
# 链接rviz_panel的依赖(只链接库目标)
target_link_libraries(rviz_panel
Qt5::Widgets
rviz_common::rviz_common
pluginlib::pluginlib
# 不要链接std_srvs::std_srvs,ROS2服务包不提供这个目标
# 使用ament_target_dependencies处理
)
# 2. 消息生成
set(msg_files
"msg/Pose6D.msg"
)
rosidl_generate_interfaces(${PROJECT_NAME}
${msg_files}
)
ament_export_dependencies(rosidl_default_runtime)
# 3. 主程序fastlio_mapping
add_executable(fastlio_mapping
src/laserMapping.cpp
include/ikd-Tree/ikd_Tree.cpp
src/preprocess.cpp
)
# 为fastlio_mapping设置包含目录
target_include_directories(fastlio_mapping PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}
${EIGEN3_INCLUDE_DIR}
${PCL_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
# 链接fastlio_mapping的依赖
target_link_libraries(fastlio_mapping
${PCL_LIBRARIES}
${PYTHON_LIBRARIES}
Eigen3::Eigen
)
# 消息类型支持
list(APPEND EOL_LIST "foxy" "galactic" "eloquent" "dashing" "crystal")
if($ENV{ROS_DISTRO} IN_LIST EOL_LIST)
# Custommsg to support foxy & galactic
rosidl_target_interfaces(fastlio_mapping
${PROJECT_NAME} "rosidl_typesupport_cpp")
else()
rosidl_get_typesupport_target(cpp_typesupport_target
${PROJECT_NAME} "rosidl_typesupport_cpp")
target_link_libraries(fastlio_mapping ${cpp_typesupport_target})
endif()
ament_target_dependencies(fastlio_mapping ${dependencies})
pluginlib_export_plugin_description_file(rviz_common plugins.xml)
# ---------------- 安装 --------------- #
# 安装可执行文件
install(TARGETS fastlio_mapping
RUNTIME DESTINATION lib/${PROJECT_NAME}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
# 安装插件库
install(TARGETS rviz_panel
LIBRARY DESTINATION lib
RUNTIME DESTINATION lib
ARCHIVE DESTINATION lib
)
# 安装plugins.xml
install(FILES plugins.xml
DESTINATION share/${PROJECT_NAME}
)
# 安装其他资源
install(
DIRECTORY config launch rviz
DESTINATION share/${PROJECT_NAME}
)
# 安装头文件
install(
DIRECTORY include/
DESTINATION include
)
# 导出ament依赖
ament_export_include_directories(include)
ament_export_libraries(rviz_panel)
ament_export_dependencies(rclcpp)
ament_export_dependencies(std_srvs)
ament_export_dependencies(rviz_common)
ament_export_dependencies(pluginlib)
ament_export_dependencies(Qt5)
ament_package()