日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS学习(六):CMakeLists.txt 文件

發布時間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS学习(六):CMakeLists.txt 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CMakeLists.txt 文件
為 CMake build 文件。是 CMake 編譯系統中軟件包的輸入。描述如何編譯代碼、安裝到哪里。

http://wiki.ros.org/catkin/CMakeLists.txt

CMakeLists.txt 格式:

1、Required CMake Version (cmake_minimum_required) 2、Package Name (project()) 3、Find other CMake/Catkin packages needed for build (find_package()) 4Message/Service/Action Generators (add_message_files(), add_service_files(), add_action_files()) 5、Invoke message/service/action generation (generate_messages()) 6、Specify package build info export (catkin_package()) 7、Libraries/Executables to build (add_library()/add_executable()/target_link_libraries()) 8、Tests to build (catkin_add_gtest()) 9Install rules (install())

1、CMake Version:
每一個 catkin CMakeLists.txt 必須以 CMake 需要的版本開始,Catkin 需要版本 2.8.3 或者更高

cmake_minimum_required(VERSION 2.8.3)

2、Package name:
CMake project function 指定的文件名。

project(robot_brain)

在 CMake script 文件中,引用 CMake package 可以使用變量 ${PROJECT_NAME}

3、依賴功能包:

尋找需要用到的其他 CMake packages,用函數 find_package。
至少依賴一個關于 catkin 的功能包

find_package(catkin REQUIRED)

如果要使用 C++ 和 Boost,則需要引用 find_package 包含 Boost,并且指明 Boost 的類型,如使用 Boost threads,則:

find_package(Boost REQUIRED COMPONENTS thread)

4、catkin_package()

catkin_package() 是 catkin 支持的 CMake 宏指令。用來向編譯系統指明 catkin-specific 的信息,而編譯系統來生成 pkg-config and CMake files。

該函數必須用在用 add_library() or add_executable() 聲明之前。
有5個可選參數:

INCLUDE_DIRS - The exported include paths (i.e. cflags) for the package LIBRARIES - The exported libraries from the project CATKIN_DEPENDS - Other catkin projects that this project depends on DEPENDS - Non-catkin CMake projects that this project depends on CFG_EXTRAS - Additional configuration options

例子:

catkin_package(INCLUDE_DIRS includeLIBRARIES ${PROJECT_NAME}CATKIN_DEPENDS roscpp nodeletDEPENDS eigen opencv)

5、Specifying Build Targets

目標文件有兩種:
1)、EXE 文件
2)、庫文件

目標命名:
注意:必須唯一
重命名用 set_target_properties() 函數,在編譯和安裝輸出中,把目標文件名 rviz_image_view 改為 image_view 如下:

set_target_properties(rviz_image_viewPROPERTIES OUTPUT_NAME image_viewPREFIX "")

自定義輸出路徑:

目標文件的默認路徑有時候必須改為自定義的路徑。自定義的路徑中,有一些默認的規則。如包含 Python bindings 的庫文件必須將路徑設置為 Python 的可 importable 文件夾。

set_target_properties(python_module_libraryPROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION})

Include Paths and Library Paths

Include Paths - 頭文件路徑 Library Paths - 庫文件路徑 include_directories(<dir1>, <dir2>, ..., <dirN>) link_directories(<dir1>, <dir2>, ..., <dirN>)

include_directories() 的參數形如 *_INCLUDE_DIRS,變量為 find_package 路徑和其他需要包含的路徑。例如,使用 catkin and Boost ,形式如下

include_directories(include ${Boost_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS})

link_directories() 用來加載外加的庫函數路徑。 catkin and CMake packages 是 find_packaged 時會自動加載鏈接信息。

link_directories(~/my_libs)

Executable Targets
將 src/main.cpp src/some_file.cpp src/another_file.cpp 編譯為文件 myProgram :

add_executable(myProgram src/main.cpp src/some_file.cpp src/another_file.cpp)

Library Targets

添加默認共享庫

add_library(${PROJECT_NAME} ${${PROJECT_NAME}_SRCS})

target_link_libraries
用在 add_executable() 之后

add_executable(foo src/foo.cpp) add_library(moo src/moo.cpp) target_link_libraries(foo moo) -- This links foo against libmoo.so

6)、Messages, Services, and Action Targets

處理 messages, services, and actions 的宏有三個:

add_message_files add_service_files add_action_files

這些宏的后面必須有調用生成的宏

generate_messages()

這些宏必須在 catkin_package() 之前使用:

find_package(catkin REQUIRED COMPONENTS ...)add_message_files(...)add_service_files(...)add_action_files(...)generate_messages(...)catkin_package(...)...

必須為 CATKIN_DEPENDS 添加依賴項 message_runtime :

catkin_package(...CATKIN_DEPENDS message_runtime ......)

必須 find_package 文功能包 message_generation,單獨或者作為 catkin 的組件。

find_package(catkin REQUIRED COMPONENTS message_generation)

另外,package.xml 需包含 build dependency on message_generation 和 runtime dependency on message_runtime。

如果目標文件包含其他目標文件,而這些目標文件需要 messages/services/actions 進行編譯,則需添加
add_dependencies(some_target ${catkin_EXPORTED_TARGETS})
some_target 是用 add_executable() 添加的目標的名字

如果你的功能包編譯 messages and/or services as well as executables 時需要用到這些宏,則
add_dependencies(some_target {{PROJECT_NAME}_EXPORTED_TARGETS})
some_target 是用 add_executable() 添加的目標的名字

如果你的功能包同時滿足上述條件,則
add_dependencies(some_target $PROJECTNAMEEXPORTEDTARGETS{catkin_EXPORTED_TARGETS})

例子:

msg:”MyMessage1.msg” and “MyMessage2.msg”
depend: std_msgs and sensor_msgs
srv: “MyService.srv”

# Get the information about this package's buildtime dependenciesfind_package(catkin REQUIREDCOMPONENTS message_generation std_msgs sensor_msgs)# Declare the message files to be builtadd_message_files(FILESMyMessage1.msgMyMessage2.msg)# Declare the service files to be builtadd_service_files(FILESMyService.srv)# Actually generate the language-specific message and service filesgenerate_messages(DEPENDENCIES std_msgs sensor_msgs)# Declare that this catkin package's runtime dependenciescatkin_package(CATKIN_DEPENDS message_runtime std_msgs sensor_msgs)# define executable using MyMessage1 etc.add_executable(message_program src/main.cpp)add_dependencies(message_program ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})# define executable not using any messages/services provided by this packageadd_executable(does_not_use_local_messages_program src/main.cpp)add_dependencies(does_not_use_local_messages_program ${catkin_EXPORTED_TARGETS})

如果,編譯 actionlib actions,需添加 actionlib_msgs 到 find_packaged 的關于 catkin 的組件中,并在 generate_messages(…) 之前添加如下代碼:

add_action_files(FILESMyAction.action )

7)、Unit Tests

catkin_add_gtest(myUnitTest test/utest.cpp)

8)、可選項:Installable Targets

CMake install() 函數參數

TARGETS - which targets to install ARCHIVE DESTINATION - Static libraries and DLL (Windows) .lib stubs LIBRARY DESTINATION - Non-DLL shared libraries and modules RUNTIME DESTINATION - Executable targets and DLL (Windows) style shared libraries

例子:

install(TARGETS ${PROJECT_NAME}ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )

python包必須被安裝到能夠被引用的路徑

install(TARGETS python_module_libraryARCHIVE DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION}LIBRARY DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION} )

安裝 Python Executable Scripts

catkin_install_python(PROGRAMS scripts/myscriptDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

安裝頭文件

install(DIRECTORY include/${PROJECT_NAME}/DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}PATTERN ".svn" EXCLUDE ) install(DIRECTORY include/DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION}PATTERN ".svn" EXCLUDE )

安裝 roslaunch Files or Other Resources

install(DIRECTORY launch/DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launchPATTERN ".svn" EXCLUDE) # install moveit plugin description file install(FILES robot_moveit_plugins.xmlDESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}

總結

以上是生活随笔為你收集整理的ROS学习(六):CMakeLists.txt 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。