通常ノード
cmake_minimum_required(VERSION 3.5)
#プロジェクト名
project(プロジェクト名)
#c++バージョン等の設定
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
#使用するpackageを記載
#ament_auto_find_build_dependencies()を使うと一つ一つ書かなくてもpackage.xmlファイルに記載したpackageを自動でやってくれる
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
#ノード名とcppファイルを記載
#${PROJECT_NAME}と書くとプロジェクト名と同じになる
ament_auto_add_executable(ノード名 src/main.cpp)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
#shareディレクトリに置くファイルを格納しているディレクトリを記載
install(DIRECTORY
#config
#launch
#rviz
#urdf
#world
#xacro
#︙
DESTINATION share/${PROJECT_NAME}/
)
ament_auto_package()
コンポーザブルノード
cmake_minimum_required(VERSION 3.5)
project(プロジェクト名)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
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_auto REQUIRED)
ament_auto_find_build_dependencies()
# create component
ament_auto_add_library(${PROJECT_NAME}_component SHARED
src/${PROJECT_NAME}_component.cpp
)
target_include_directories(${PROJECT_NAME}_component PRIVATE include)
rclcpp_components_register_node(${PROJECT_NAME}_component
PLUGIN "クラス名"
EXECUTABLE ${PROJECT_NAME}
)
# install config
install(
DIRECTORY config
DESTINATION share/${PROJECT_NAME}/
)
# build testing
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()
メッセージ作成
cmake_minimum_required(VERSION 3.8)
project(プロジェクト名)
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(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
set(msg_files
"msg/メッセージファイル名.msg"
)
rosidl_generate_interfaces(${PROJECT_NAME}
${msg_files}
DEPENDENCIES std_msgs geometry_msgs
)
ament_export_dependencies(rosidl_default_runtime)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()
ヘッダーオンリーライブラリ例
cmake_minimum_required(VERSION 3.5)
project(プロジェクト名)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
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(tf2 REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(cpp_general_ament REQUIRED)
# create library
add_library(${PROJECT_NAME} INTERFACE)
ament_target_dependencies(${PROJECT_NAME} INTERFACE
rclcpp
tf2
tf2_ros
tf2_geometry_msgs
geometry_msgs
cpp_general_ament
)
# install library
install(
DIRECTORY include/
DESTINATION include
)
install(
TARGETS ${PROJECT_NAME}
EXPORT export_${PROJECT_NAME}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)
# export ament library
ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET)
ament_export_dependencies(
rclcpp
tf2
tf2_ros
tf2_geometry_msgs
geometry_msgs
cpp_general_ament
)
ament_package()
メモ
CmakeLists.txt,package.xmlテンプレート