手动创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()

猜你喜欢

转载自blog.csdn.net/shuipengpeng/article/details/80302551