最近在學習cmake,在完整看了《cmake實踐》一書後,跟着書上例程敲了跑了一遍,也寫了幾篇相關讀書筆記,算是勉強基本入門了。因此找了usb_cam軟件包的CMakeLists.txt來進一步學習,在看懂這個例子以後,準備寫篇博客記錄一下,如有謬誤還望指正。html
<br />node
如今市面上最多見的仍是USB攝像頭,物美價廉,要想使USB攝像頭在ROS下正常工做,咱們就須要一個軟件包來支持,如今ROS下最經常使用的usb攝像頭軟件包就是usb_cam,簡單理解該軟件包就是V4L(Video for Linux)USB攝像頭驅動在ROS在的一個移植版本。linux
下面咱們在github上來下載該源碼,github上的usb_cam源碼網址以下:git
https://github.com/ros-drivers/usb_camgithub
經過下圖來查看整個下載操做流程:ide
下面來查看usb_cam源碼介紹:學習
下載好源碼後,<span style="color:red">找到CMakeFiles.txt文件,修改添加註釋後的內容以下:</span>ui
#檢查cmake的版本,要求至少爲2.8.3 cmake_minimum_required(VERSION 2.8.3) #定義工程名爲usb_cam project(usb_cam) #搜索外部庫(包)catkin,並在後面列出了與 catkin包 相關的一些部件清單 find_package(catkin REQUIRED COMPONENTS image_transport roscpp std_msgs std_srvs sensor_msgs camera_info_manager) #先搜索cmake本身的PkgConfig模塊,才能使用pkg_check_modules find_package(PkgConfig REQUIRED) #pkg_check_module與find_package功能基本一直,也是搜索外部庫 pkg_check_modules(avcodec libavcodec REQUIRED) #libavcodec庫用於讀取視頻文件 pkg_check_modules(swscale libswscale REQUIRED) #libswscale庫用於各類圖像像素格式的轉換 #catkin_package 宏是 catkin 的宏之一,聲明要傳遞給依賴項目的內容,生成 cmake 配置文件。 catkin_package( INCLUDE_DIRS include LIBRARIES ${PROJECT_NAME} ) #用來向工程添加多個頭文件搜索路徑 include_directories( include ${catkin_INCLUDE_DIRS} ${avcodec_INCLUDE_DIRS} ${swscale_INCLUDE_DIRS} ) #將指定的源文件usb_cam.cpp生成連接庫文件,而後添加到工程中去 add_library(${PROJECT_NAME} src/usb_cam.cpp) #用來向工程usb_cam添加多個連接庫 target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${avcodec_LIBRARIES} ${swscale_LIBRARIES} ) ##生成一個名爲usb_cam_node的可執行文件,其對應源文件是nodes/usb_cam_node.cpp add_executable(${PROJECT_NAME}_node nodes/usb_cam_node.cpp) #用來向可執行文件usb_cam_node添加多個連接庫 target_link_libraries(${PROJECT_NAME}_node ${PROJECT_NAME} ${avcodec_LIBRARIES} ${swscale_LIBRARIES} ${catkin_LIBRARIES} ) #可執行文件usb_cam_node安裝到CATKIN的BIN目錄下 (在可執行文件連接了外部庫後) #靜態庫usb_cam安裝到CATKIN的LIB目錄下 (在工程連接了外部庫後) install(TARGETS ${PROJECT_NAME}_node ${PROJECT_NAME} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} ) #在/launch目錄下安裝一個啓動文件 install(DIRECTORY launch/ DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch FILES_MATCHING PATTERN "*.launch" ) #在catkin的include目錄下安裝include/usb_cam目錄下的全部內容 install(DIRECTORY include/${PROJECT_NAME}/ DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" )
具體的分析已在註釋中詳細說明了,有些不明白的指令能夠參考個人另外一篇博客 - CMake學習筆記三:cmake 經常使用指令 。spa