昨天寫了package.xml,今天不免俗的就來寫CMakeList.txt吧!
其實平常有在開發大型專案的人應該對CMakeList.txt不陌生,所以其實這篇不會ros的人也可以看,只是我會比較著重在ros官網有介紹的部分囉~ ros主要使用的編譯器是catkin,所以其編寫的方式也會遵從catkin的規則。
CMakeList.txt是CMake編譯系統用來編譯檔案的描述檔,其內會定義要如何編譯專案的程式以及相應的函式庫,而ROS的專案所需要的格式必須遵從下列幾項規則,並且需要照順序編寫:
雖然官網寫上述10點都是必須遵守的規則,但是筆者實際在撰寫cmakelist的時候少了4.9.10都還是可以正常執行呦~XD
這個就是每個CMakeList.txt的起手式啦! 先定義好cmake編譯的版本,若使用catkin編譯,所需使用的是2.8.3以上的版本。
cmake_minimum_required(VERSION 2.8.3)
在ros內,一個package基本上等同於一個專案(project),也就是平常下rosrun / roslaunch / roscd 後面接著的package名稱,在這邊定義。
project(project_name)
find_package是cmake原生有的功能,在這邊可以寫編寫此專案的時候會用到的其他相依模組,通常在我們下catkin_create_package
後面加的package會直接被加入這裡面,例如:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
如果你寫的這個package包含一些需要用到的python模組,就需要寫個setup.py
檔並且加入這行:
catkin_python_setup()
但是筆者我平常寫c++的node比較多,還真的沒加過這行呢(´・ω・`)
message, service, action都是ros會用到的功能,需要透過下列三個格式進行編譯以後才有辦法拿來用在package中呼叫,不同檔名都需放在對應的資料夾內,例如msg檔要放在msg的資料夾中,以此類推,這樣cmakelist才連接得到該msg。
## Generate messages in the 'msg' folder
add_message_files(
FILES
message_name.msg
)
## Generate services in the 'srv' folder
add_service_files(
FILES
service_name.srv
)
## Generate actions in the 'action' folder
add_action_files(c86
FILES
action_name.action
)
在編譯msg/srv/action時會用到的msg格式,例如最常用的std_msgs、sensor_msgs等,需要列在generate_messages底下:
## Generate added messages and services with any dependencies listed here
generate_messages(
DEPENDENCIES
std_msgs
geometry_msgs
)
雖然筆者很想把cmakelist在一天內寫完,無奈社畜的空閒時間實在不多,而且cmakelist認真要寫的話真的可以寫一串出來XD 所以我們明天繼續吧~
http://wiki.ros.org/catkin/CMakeLists.txt
https://www.itread01.com/content/1548087310.html