ROS的CMakeList编写

参考这位博主

我的cmakelist包(在/home/xxx/catkin_Drone/src/Flight_Control_ROS/CMakeLists.txt):

cmake_minimum_required(VERSION 3.0.2)
project(flight_control)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  sensor_msgs
  dji_osdk_ros
  sensor_msgs
)

find_package(OpenCV REQUIRED)
include_directories(include ${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARIES})

catkin_package(
   INCLUDE_DIRS include
   # LIBRARIES flight_control
   CATKIN_DEPENDS roscpp rospy std_msgs
   # DEPENDS system_lib
)

include_directories(
  include
  include/macro_lib
  include/math_lib
  include/ctrl_lib
  ${catkin_INCLUDE_DIRS}
)

FILE(GLOB SOURCE_FILES src/*.c src/*.cpp)
add_library(src ${SOURCE_FILES})
link_libraries(src)

add_executable(land_control land_control.cpp)
add_dependencies(land_control ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(land_control ${catkin_LIBRARIES} jsoncpp)

编译后运行flight_control这个工程包的land_control节点:

rosrun flight_control land_control

解读

  • cmake_minimum_required–>指定CMake版本
  • project(flight_control)->指定CMake工程名,也就是最后生成的
  • find_package(catkin REQUIRED COMPONENTS ->需要依赖catkin包和其他包(或者组件)
  • include_directories ->生成目标之前先写好包含路径和库路径
  • link_directories->用于添加额外的库路径,但通常不推荐这样做,因为 所有catkin和CMake软件包在find_packaged时都会自动添加链接信息。 只需写target_link_libraries()中就可以了
  • catkin_package->catkin特定的信息信息输出到构建系统上,用于生成pkg配置文件以及CMake文件。
    这个命令必须在add_library()或者add_executable()之前调用
  • FILE ->指定文件
  • add_library ->用于指定要构建的库
  • link_libraries- >指定可执行目标链接的库
  • add_executable->要指定必须构建的可执行目标
  • add_dependencies->为自动生成的消息目标创建明确的依赖关系,以便以正确的顺序构建它们
  • target_link_libraries->指定可执行目标链接的库。 通常在add_executable()调用之后完成。 如果找不到ros,则添加$ {catkin_LIBRARIES}

cmake与make相比

CMake解决了同样的问题(以及更多),但与GNU Build System相比有一些优势.

用于编写CMakeLists.txt文件的语言可读且易于理解.
它不仅依靠make来构建项目.它支持多个生成器,如Visual Studio,Xcode,Eclipse等.

将CMake与make进行比较时,使用CMake还有其他几个优点:

系统库的跨平台发现.
自动发现和配置工具链.
更容易以平台无关的方式将文件编译到共享库中,并且通常比make更容易使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值