用于创建此对象的程序是package_【ROS 学习笔记】CMakeLists.txt 与 package.xml
0. 前言
在 ROS 中,節點的編寫語言通常只有 C++ 和 Python,C++ 需要編譯后才能運行,Python 則無需編譯。
我們知道 Linux 平臺編譯 C++ 文件,需要編譯器和鏈接器,其中編譯器是將源代碼編譯成目標代碼,鏈接器是將目標代碼鏈接到可執行文件。若是編譯單個文件,用 g++ 即可;若是編譯一個 C++ 工程,則需要批處理編譯工具,如 make,通過設定規則文件 makefile 調用 g++ 等編譯工具進行批量編譯。但 makefile 的編寫十分復雜,便誕生了 CMake,通過編寫簡單的 CMakeLists.txt 規則文件,就能自動生成 makefile 文件,并且 CMake 是跨平臺的,十分強大。可參考之前的博客:
Linux 編譯工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake?www.cnblogs.comROS 的編譯器便是 CMake,為了更加人性化,ROS 在 CMake 基礎上封裝了 catkin 命令,用 cmake 命令創建功能包時,會自動生成 CMakeList.txt 文件,已配置了多數編譯選項,且包含詳細的注釋,只需稍作修改便可編譯自己的文件。
而 package.xml 文件是描述功能包清單的文件,包括功能包的名稱、版本號、作者信息、許可信息、編譯依賴和運行依賴等。
我們在用 catkin_create_pkg 命令創建功能包時,是會自動生成 CMakeLists.txt 和 package.xml 文件的。
舉例:
# 創建工作空間 mkdir -p ~/catkin_ws/src下面看下 CMakeLists.txt 文件和 package.xml 文件各有哪些內容,需要自己改動哪些地方。
1. CMakeLists.txt 文件
常用的編譯配置項如下:
(1)include_directories
- 用于設置頭文件的相對路徑
- 全局路徑默認為功能包所在目錄,功能包的頭文件一般放在功能包根目錄下的 include 文件夾,所以需要此處添加此文件夾
- 還包含 catkin 編譯器默認的其他頭文件路徑,如:ROS 默認安裝路徑、Linux 系統路徑等
(2)add_exectuable
- 用于設置需要編譯的代碼和可執行文件
- 第一個參數為期望生成的可執行文件(節點)名稱
- 后面的參數為參與編譯的源文件(.cpp),若需要多個代碼文件,可依次列出,空格分隔
(3)target_link_libraries
- 用于設置鏈接庫
- 有些功能需要使用系統或第三方庫函數,通過該選項可以配置執行文件鏈接的庫文件
- 第一個參數與 add_exectuable 相同,為可執行文件(節點)名稱
- 后面的參數為需要鏈接的庫,依次列出,空格分隔
(4)add_dependencies
- 用于設置依賴
- 有時候需要自定義消息類型,消息類型會在編譯過程中產生相應語言的代碼。若編譯的可執行文件依賴這些動態生成的代碼,則需要添加 ${PROJECT_NAME}_generate_messages_cpp 配置
(5)自定義數據類型:消息 msg、服務 srv、動作 action
- find_package(catkin REQUIRE COMPONENTS message_generation)
- catkin_package(CATKIN_DEPENDS message_runtime)
- add_message_files(FILES xxx.msg)
- add_service_files(FILES xxx.srv)
- add_action_files(FILES xxx.action)
- generate_messages(DEPENDENCIES std_msgs)
模板:
cmake_minimum_required2. package.xml 文件
- <build_depend></build_depend> 標簽定義了功能包中代碼編譯時所依賴的其他功能包
- <exec_depend></exec_depend> 標簽定義了功能包中可執行程序運行時所依賴的其他功能包
- 自定義數據類型:話題消息 msg、服務數據 srv,需添加
模板:
<?xml version="1.0"?>總結
以上是生活随笔為你收集整理的用于创建此对象的程序是package_【ROS 学习笔记】CMakeLists.txt 与 package.xml的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python提取视频帧并保存_pytho
- 下一篇: 51单片机按键控制数码管0~9_7种常见