iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0
Software Development

ROS進階學習筆記系列 第 10

Day 10 - ROS中的CMakeList.txt (2)

  • 分享至 

  • xImage
  •  

延續昨天的文章,今天繼續來補完XD

編譯上述package時需要用到的模組資訊 (catkin_package())

catkin_package說實在和昨天的find_package很像,不過find_package是cmake原生的巨集,catkin_package是catkin的巨集,會被建立在環境變數中,主要分為五個可以選擇撰寫的部分:

  • INCLUDE_DIRS - package include的資料夾,一般下include就可以了
  • LIBRARIES - 建立的函式庫名稱
  • CATKIN_DEPENDS - 其他相依的catkin package
  • DEPENDS - 其他相依的非catkin 編譯的package
  • CFG_EXTRAS - 額外的設定檔

範例:

catkin_package(
   INCLUDE_DIRS include
   LIBRARIES ${PROJECT_NAME}
   CATKIN_DEPENDS roscpp nodelet
   DEPENDS eigen opencv)

主要編譯的函式庫/執行檔等,以及其需要相依的函式庫(add_library()/add_executable()/target_link_libraries())

建立此package中要編譯的程式(node),還有跟各個node要連結的函式庫/head file等,範例:

add_executable(foo src/foo.cpp)
add_library(moo src/moo.cpp)
target_link_libraries(foo moo)

小提醒: 同時編譯message和node時

若有自定義的message在同一包package內,但是在編譯的時後又需要先編好message後才編node,會報錯,這時候就要再加一行:

add_dependencies(foo ${catkin_EXPORTED_TARGETS})

這樣就不會一直報錯囉! 在下catkin_make的時候就會優先去build dependance內的檔案,也是官網教學內容易略的一環~

測試檔編譯 (catkin_add_gtest())

這個是catkin編譯時使用的unit test巨集,筆者沒有用過:

if(CATKIN_ENABLE_TESTING)
  catkin_add_gtest(myUnitTest test/utest.cpp)
endif()

Install時的規則 (install())

有時候編譯完以後要將這些程式丟去系統環境中,因此需要訂好install的規則,可以分成四大類:

  • TARGETS - install 的目標
  • ARCHIVE DESTINATION - 靜態函式庫跟DLL libs
  • LIBRARY DESTINATION - 非DLL的函式庫跟模組
  • RUNTIME DESTINATION - 可執行的目標檔案

install的部分筆者也其實看了有點一知半解,因為平常在寫專案的時候不太會用到,只能等待未來有用到的時候有新的領悟再來更新了XD

範例:

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

Reference

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


上一篇
Day 09 - ROS中的CMakeList.txt
下一篇
Day 11 - 編譯工具 catkin v.s colcon
系列文
ROS進階學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言