mirror of
https://github.com/chengyangkj/Ros_Qt5_Gui_App.git
synced 2025-09-15 12:58:58 +08:00
110 lines
4.2 KiB
CMake
110 lines
4.2 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
project(ros_qt5_gui_app)
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(QT_VERSION_MAJOR 5)
|
|
#############子构建项目
|
|
#dockWidget
|
|
set(VERSION_SHORT "0.0.1")
|
|
add_subdirectory(3rdpart/dockWidget)
|
|
##################################1,编译平台设置:自动检查编译平台是ROS1还是ROS2#######################
|
|
if(DEFINED ENV{ROS_VERSION} AND "$ENV{ROS_VERSION}" STREQUAL "1")
|
|
message("USE ROS1")
|
|
set(COMPILE_PLATFORM "ROS1")
|
|
elseif(DEFINED ENV{ROS_VERSION} AND "$ENV{ROS_VERSION}" STREQUAL "2")
|
|
message("USE ROS2")
|
|
set(COMPILE_PLATFORM "ROS2")
|
|
else()
|
|
message(FATAL_ERROR "ros2 or ros2 not install or envirment not set!!!!!!!!!!!!!")
|
|
endif()
|
|
##或者在这里手动设置
|
|
# set(COMPILE_PLATFORM "ROS1") #强制设置为ROS1
|
|
# set(COMPILE_PLATFORM "ROS2") #强制设置为ROS2
|
|
##################################2,查找依赖包:根据ROS1还是ROS2#######################
|
|
# find dependencies
|
|
if(COMPILE_PLATFORM STREQUAL "ROS1")
|
|
message("ros1")
|
|
add_definitions(-DROS1_NODE=1) #设置程序宏定义
|
|
find_package(catkin REQUIRED COMPONENTS roscpp
|
|
tf
|
|
sensor_msgs
|
|
cv_bridge
|
|
std_msgs
|
|
image_transport
|
|
)
|
|
elseif(COMPILE_PLATFORM STREQUAL "ROS2")
|
|
message("ros2")
|
|
add_definitions(-DROS2_NODE=1) #设置程序宏定义
|
|
find_package(ament_cmake REQUIRED)
|
|
find_package(rclcpp REQUIRED)
|
|
find_package(nav_msgs REQUIRED)
|
|
find_package(tf2 REQUIRED)
|
|
find_package(tf2_geometry_msgs REQUIRED)
|
|
find_package(tf2_ros REQUIRED)
|
|
find_package(tf2_kdl REQUIRED)
|
|
find_package(sensor_msgs REQUIRED)
|
|
endif()
|
|
|
|
|
|
find_package(Boost REQUIRED COMPONENTS thread)
|
|
find_package(Eigen3 REQUIRED)
|
|
find_package(Qt5 COMPONENTS Widgets REQUIRED)
|
|
##################################3,设置程序源文件路径#######################
|
|
file(GLOB_RECURSE SOURCE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp src/*.cc)
|
|
file(GLOB_RECURSE UI_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS ui/*.ui)
|
|
file(GLOB_RECURSE QRC_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS resource/*.qrc)
|
|
file(GLOB_RECURSE INCLUDE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS include/*.h *.hpp)
|
|
#################################4,不同平台,屏蔽不同源文件####################
|
|
####设置ros1相关源文件
|
|
file(GLOB_RECURSE ROS1_SOURCE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS src/channel/ros1/*.cpp)
|
|
file(GLOB_RECURSE ROS1_INCLUDE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS include/channel/ros1/*.h)
|
|
####设置ros2相关源文件
|
|
file(GLOB_RECURSE ROS2_SOURCE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS src/channel/ros2/*.cpp)
|
|
file(GLOB_RECURSE ROS2_INCLUDE_FILE RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS include/channel/ros2/*.h)
|
|
#根据不同平台 屏蔽源文件
|
|
if(COMPILE_PLATFORM STREQUAL "ROS2")
|
|
list(REMOVE_ITEM SOURCE_FILE ${ROS1_SOURCE_FILE})
|
|
list(REMOVE_ITEM INCLUDE_FILE ${ROS1_INCLUDE_FILE})
|
|
elseif(COMPILE_PLATFORM STREQUAL "ROS1")
|
|
message("use ros1 node")
|
|
list(REMOVE_ITEM SOURCE_FILE ${ROS2_SOURCE_FILE})
|
|
list(REMOVE_ITEM INCLUDE_FILE ${ROS2_INCLUDE_FILE})
|
|
endif()
|
|
|
|
####qt moc
|
|
qt5_wrap_ui(QT_UI_HPP ${UI_FILE})
|
|
qt5_wrap_cpp(QT_MOC_HPP ${INCLUDE_FILE})
|
|
qt5_add_resources(QT_RESOUCE_HPP ${QRC_FILE})
|
|
|
|
#项目包含的头文件路径
|
|
include_directories(
|
|
include/
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${catkin_INCLUDE_DIRS}
|
|
${EIGEN3_INCLUDE_DIR}
|
|
)
|
|
#向可执行程序添加源文件
|
|
add_executable(${PROJECT_NAME}
|
|
${SOURCE_FILE}
|
|
${INCLUDE_FILE}
|
|
${UI_FILE}
|
|
${QT_MOC_HPP}
|
|
${QT_RESOUCE_HPP}
|
|
)
|
|
#链接公共库
|
|
target_link_libraries(${PROJECT_NAME} Qt5::Widgets ${catkin_LIBRARIES} qt${QT_VERSION_MAJOR}advanceddocking)
|
|
#################################5,不同平台,链接不同库####################
|
|
# 判断使用ros1 还是ros2
|
|
if(COMPILE_PLATFORM STREQUAL "ROS2")
|
|
ament_target_dependencies(${PROJECT_NAME} rclcpp Boost nav_msgs tf2 tf2_geometry_msgs tf2_ros sensor_msgs tf2_kdl)
|
|
install(TARGETS ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME})
|
|
ament_package()
|
|
elseif(COMPILE_PLATFORM STREQUAL "ROS1")
|
|
message("use ros1 node")
|
|
# catkin_package()
|
|
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
|
|
endif()
|
|
|