延續昨天的文章,今天繼續來補完XD
catkin_package說實在和昨天的find_package很像,不過find_package是cmake原生的巨集,catkin_package是catkin的巨集,會被建立在環境變數中,主要分為五個可以選擇撰寫的部分:
範例:
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp nodelet
DEPENDS eigen opencv)
建立此package中要編譯的程式(node),還有跟各個node要連結的函式庫/head file等,範例:
add_executable(foo src/foo.cpp)
add_library(moo src/moo.cpp)
target_link_libraries(foo moo)
若有自定義的message在同一包package內,但是在編譯的時後又需要先編好message後才編node,會報錯,這時候就要再加一行:
add_dependencies(foo ${catkin_EXPORTED_TARGETS})
這樣就不會一直報錯囉! 在下catkin_make的時候就會優先去build dependance內的檔案,也是官網教學內容易略的一環~
這個是catkin編譯時使用的unit test巨集,筆者沒有用過:
if(CATKIN_ENABLE_TESTING)
catkin_add_gtest(myUnitTest test/utest.cpp)
endif()
有時候編譯完以後要將這些程式丟去系統環境中,因此需要訂好install的規則,可以分成四大類:
install的部分筆者也其實看了有點一知半解,因為平常在寫專案的時候不太會用到,只能等待未來有用到的時候有新的領悟再來更新了XD
範例:
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)
http://wiki.ros.org/catkin/CMakeLists.txt