点击(此处)折叠或打开
- ros2 pkg create --dependencies [deps]
- ros2 pkg create --dependencies [deps] --build-type ament_python
- ros2 pkg create --dependencies [deps] --build-type ament_cmake
- --------------------------------------------------------------------------------------------------------------
- CMakeFiles.txt 修改
- ament_target_dependencies( [dependencies])
- 在 ament_package()前加入
- # Install launch files
- install( DIRECTORY launch DESTINATION share/${PROJECT_NAME} )
- # Install nodes
- install( TARGETS [node-names] DESTINATION lib/${PROJECT_NAME} )
- #######################################################################3
- colcon build --symlink-install
- 用于一些python 和资源文件等等无需编译文件被修改的情况
- #####################################################
- https://index.ros.org/doc/ros2/Tutorials/Ament-CMake-Documentation/
- ament_cmake 是ROS2基于CMake的一个编译系统.
- 类似Shell脚本, 里边可以定义自定义宏以及自定义函数
- ros2 pkg create 会产生 package.xml 以及 CMakeLists.txt
- package.xml: 包含所有依赖项和一些元数据,以便让colcon为您的包找到正确的构建顺序,
- 以便在CI中安装所需的依赖项,并为bloom发布提供信息
- CMakeLists.txt :用于构建和打包可执行文件和库的命令
- CMakeLists.txt 解析: project : 包名, package_name, 必须和 package.xml 相同.
- 一些通用的编译选项
- -Wall -Wextra -Wpedantic 是必须的
- -Wshadow -Werror 建议使用.
- target_compile_options(my_target PRIVATE -Wshadow -Werror)
- #####################
- ament_package(): 放在 CMakeLists.txt最后. 项目必须调用一次, 用于建立项目.
- 类似于Makeifle中的 make all. 他从 CMakeLists.txt 前面搜集很多信息,
- ament_package 需要的参数
- CONFIG_EXTRAS: 一些 CMake文件的列表, 最先include进来
- ${PROJECT_NAME}_CONFIG_EXTRAS: 第二被include进来
- ${PROJECT_NAME}_CONFIG_EXTRAS_POST 第三被include进来
- CONFIG_EXTRAS_POST: 一些 CMake文件的列表, 最后 include 进来
- 添加头文件
- target_include_directories(my_target
- PUBLIC
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:include>
- )
- 增加依赖
- find_package(Eigen3 REQUIRED)
- ament_target_dependencies(my_target Eigen3)
- 或者使用
- find_package(Eigen3 REQUIRED)
- target_link_libraries(my_target Eigen3::Eigen)
- ###################################################
- 建立一个库
- ament_export_interfaces(export_my_library HAS_LIBRARY_TARGET)
- ament_export_dependencies(some_dependency)
- install(
- DIRECTORY include/
- DESTINATION include
- )
- install(
- TARGETS my_library
- EXPORT export_my_library
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib
- RUNTIME DESTINATION bin
- INCLUDES DESTINATION include
- )
- ament_export_include_directories(include)
- ament_export_libraries(my_library)
- 添加一个executable, 相同流程.
- ////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////
- 库的范例.
- ////////////////////////////////////////////////////////////////////////////////////////////
- cmake_minimum_required(VERSION 3.5)
- project(plugin_apcc_ctrl)
- # Default to C99
- if(NOT CMAKE_C_STANDARD)
- set(CMAKE_C_STANDARD 99)
- endif()
- # Default to C++14
- if(NOT CMAKE_CXX_STANDARD)
- set(CMAKE_CXX_STANDARD 14)
- endif()
- if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- add_compile_options(-Wall -Wextra -Wpedantic)
- endif()
- ################################################################################
- # Find ament packages and libraries for ament and system dependencies
- ################################################################################
- find_package(ament_cmake REQUIRED)
- find_package(rclcpp REQUIRED)
- find_package(std_msgs REQUIRED)
- find_package(rcutils REQUIRED)
- find_package(ament_index_cpp REQUIRED)
- find_package(hr_msgs REQUIRED)
- ################################################################################
- # additional Include / Linked dependencies
- ################################################################################
- include_directories(
- include
- ${Boost_INCLUDE_DIRS}
- ${std_msgs_INCLUDE_DIRS}
- ${rclcpp_INCLUDE_DIRS}
- )
- link_directories(
- /opt/ros/eloquent/lib
- )
- ################################################################################
- # Declare ROS executable and library
- ################################################################################
- set ( SRC
- src/apcc_ctrl_plugin.cpp
- )
- set ( LIBS
- rclcpp
- rcutils
- ament_index_cpp
- std_msgs
- hr_msgs
- )
- add_library(plugin_apcc_ctrl SHARED
- ${SRC}
- )
- target_include_directories(
- plugin_apcc_ctrl
- PRIVATE
- src
- PUBLIC
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:include>
- )
- target_compile_definitions(
- plugin_apcc_ctrl
- PRIVATE
- "COMPOSITION_BUILDING_DLL"
- PUBLIC
- USE_UDP_CONSOLE=1
- )
- target_compile_options(
- plugin_apcc_ctrl
- PRIVATE
- -Werror -Wno-unused -Wno-missing-field-initializers -Wno-reorder
- )
- target_link_libraries(
- plugin_apcc_ctrl
- ${std_msgs_LIBRARIES}
- rt pthread jsoncpp uuid curl mp3lame
- )
- ament_target_dependencies(plugin_apcc_ctrl ${LIBS} )
- ################################################################################
- install(
- DIRECTORY include/
- DESTINATION include
- )
- # lib
- install(
- TARGETS plugin_apcc_ctrl
- ARCHIVE DESTINATION lib
- LIBRARY DESTINATION lib
- RUNTIME DESTINATION bin
- INCLUDES DESTINATION include
- )
- ################################################################################
- # Last. do make
- ################################################################################
- ament_export_libraries(plugin_apcc_ctrl)
- ament_export_include_directories(include)
- ament_package()
- ////////////////////////////////////////////////////////////////////////////////////////////
- 库的调用
- ////////////////////////////////////////////////////////////////////////////////////////////
- find_package(plugin_apcc_ctrl REQUIRED)
- set ( LIBS
- rclcpp
- rcutils
- ament_index_cpp
- std_msgs
- hr_msgs
- plugin_apcc_ctrl
- )
- ament_target_dependencies(hr_apcc_controller_demo ${LIBS} )