ROS1やROS2で簡単なGUIボタンを使用するときにQt5を使用する機会があると思います。私は、ROS1で使用したプロジェクトをROS2に移植しましたが、少し苦戦しました… そこで、自分用のCMakeLists.txtのテンプレートを作成したので、備忘録で残しておきます。
ROS1とROS2だと書き方は大きく変わる部分もありますが、Qtの記法についてはあまり変化はありません。ROS1とROS2用のCMakeLists.txtをそれぞれ示します。
ROS1(Melodic)
cmake_minimum_required(VERSION 3.0.2) project(ros_gui) set(CMAKE_AUTOMOC ON) find_package(catkin REQUIRED COMPONENTS roscpp std_msgs ) find_package(Qt5Core) find_package(Qt5Widgets) set(QT_LIBRARIES Qt5::Widgets) add_definitions(-DQT_NO_KEYWORDS) catkin_package( ) include_directories( # include ${catkin_INCLUDE_DIRS} ) add_executable(qt_talker src/qt_talker.cpp src/qt_talker_class.cpp) target_link_libraries(qt_talker ${catkin_LIBRARIES} ${QT_LIBRARIES})
ROS2(Dashing)
cmake_minimum_required(VERSION 3.5) project(ros_gui) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(Qt5Core) find_package(Qt5Widgets) set(QT_LIBRARIES Qt5::Widgets) include_directories(qt_talker ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) add_executable(qt_talker src/qt_talker.cpp src/qt_talker_class.cpp ) ament_target_dependencies(qt_talker rclcpp std_msgs ) target_link_libraries(qt_talker ${QT_LIBRARIES} ) install(TARGETS qt_talker DESTINATION lib/${PROJECT_NAME} ) ament_package()