手動創CMakeList.txt對應源碼解釋

CMakeList.txt

catkin基於CMake實現,CMakeList的語句與基本CMake一致,常用的包括:

  • cmake_minimum_required():CMake版本
    cmake_minimum_required(VERSION 2.8.3)
  • 1
  • project():工程名
    project(your_package)
  • 1
  • find_package():加載外部變量
    # 加載catkin中的變量,同時添加angles、roscpp、std_msgs的依賴
    find_package(catkin REQUIRED COMPONENTS angles roscpp std_msgs)
    # 加載Boost中的變量
    find_package(Boost REQUIRED COMPONENTS thread)
  • 1
  • 2
  • 3
  • 4
  • include_directories():添加頭文件路徑
    # 添加./include、${catkin_INCLUDE_DIRS}爲頭文件路徑,如果有其它外部路徑也在這裏添加
    include_directories(include ${catkin_INCLUDE_DIRS})
    # Boost_INCLUDE_DIRS環境變量在上面find_package中加載
    include_directories(${Boost_INCLUDE_DIRS})
  • 1
  • 2
  • 3
  • 4
  • add_library():生成庫
    # 生成庫文件,可傳入多個源文件
    add_library(your_library 
        libsrc1.cpp 
        libsrc2.cpp 
        libsrc_etc.cpp
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • add_executable():生成可執行文件
    # 生成可執行文件,可以傳入多個源文件
    add_executable(my_node 
        src0.cpp 
        src1.cpp 
        src2.cpp
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • add_dependencies():添加依賴項,在使用ROS的message、service、action時注意添加,如下:
    # 添加對其它package消息的依賴,前提是已經通過find_package()引入了這個package
    add_dependencies(my_target ${catkin_EXPORTED_TARGETS})
    # 添加對本package消息的依賴
    add_dependencies(my_target ${${PROJECT_NAME}_EXPORTED_TARGETS})
  • 1
  • 2
  • 3
  • 4
  • target_link_libraries():鏈接庫
    # 爲可執行文件或庫添加鏈接庫
    target_link_libraries(my_node
        ${catkin_LIBRARIES}        # ROS基本庫
        ${Boost_LIBRARIES}         # Boost庫
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • install():安裝
    # 默認情況catkin會爲每個package在./devel中建立目錄,存放目標文件
    # 目標文件可以直接通過rosrun和roslaunch訪問
    # 如需制定其它安裝位置,則需通過install()命令
    install(TARGETS my_node0 my_node1
      ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
      LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
      RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以上語句功能不詳細敘述。 
除此之外,catkin還爲ROS設計了一些獨有語句,包括:

  • add_message_files(), add_service_files(), add_action_files() 
    用於添加自定義的message、service和action文件。基本語法爲:
    # 以message爲例,service、action類似
    add_message_files(
        # 目錄名
        DIRECTORY msg
        # 文件名
        FILES YourFirstMessage.msg YourSecondMessage.msg YourThirdMessage.msg
    )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • generate_messages() 
    用於生成所有定義的message、service、action文件,需要添加本文件需要依賴的message文件包。 
    一般情況下需要依賴std_msgs,如果用到了其它類型的msg,也要在這聲明。如下:
    generate_messages(DEPENDENCIES std_msgs)
  • 1
  • catkin_package()

    catkin_package()是catkin提供的CMake宏,用於爲catkin提供構建、生成pkg-config和CMake文件所需要的信息。 
    必須在聲明add_library()或add_executable()前調用 
    有5個可選參數:

    • INCLUDE_DIRS - 聲明給其它package的include路徑
    • LIBRARIES - 聲明給其它package的庫
    • CATKIN_DEPENDS - 本包依賴的catkin package
    • DEPENDS - 本包依賴的非catkin package
    • CFG_EXTRAS - 其它配置參數

    比如:

    catkin_package(
       INCLUDE_DIRS include
       LIBRARIES ${PROJECT_NAME}
       CATKIN_DEPENDS roscpp nodelet
       DEPENDS eigen opencv)
  • 1
  • 2
  • 3
  • 4
  • 5
  • catkin_add_gtest(), catkin_add_nosetests(), add_rostest(), add_rostest_gtest()
發佈了45 篇原創文章 · 獲贊 26 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章