【CMake】浅谈使用 colcon build 时 CMakeLists 的配置方法-1.使用第三方开源库

0.前言

这段时间开始学习使用cmake配各种包,在这里记录下来一些过程方便回顾。
本节讨论引用第三方库和导出自己的库

1.引入外部库

例如,我们从 github 上 clone 了 ompl 库,想要在自己的 package 中使用它,该如何做到呢?
首先,将 ompl 包 和自己的 pkg 包放在工作空间的 src 目录下,并提前编译好 ompl:

colcon build --packages-select ompl

在我们 pkg 功能包的 CMakeFiles 文件中添加以下代码:

find_package(ompl REQUIRED)

find_package会自动定位并载入指定库的配置文件,首先在当前的层级目录(install文件夹)中查询,如果没有找到则去系统目录中(usr/local/share)继续查找(所以当同时用二进制安装和源码编译后,优先使用的是源码)。

(REQUIRED:可选字段。表示一定要找到包,找不到的话就立即停掉整个CMake。而如果不指定REQUIRED则CMake会继续执行。)

在查找完成后,会返回几个关键字:

  1. <LibaryName>_FOUND
    用于判断是否成功找到目标功能包
  2. <LibaryName>_INCLUDE_DIR or <LibaryName>_INCLUDES
    包含头文件的文件夹所在路径
  3. <LibaryName>_LIBRARY or <LibaryName>_LIBRARIES
    库文件所在路径

想要看关键字具体索引到的路径地址,可以通过:

message(STATUS "find OMPL_INCLUDE:${OMPL_INCLUDE_DIRS}")
message(STATUS "find OMPL_LIB:${OMPL_LIBRARIES}")

来查看。由于我们使用colcon build 进行编译,所以输出的日志信息会被储存到工作空间下的 log 文件夹中,进入对应日期时间的文件夹后打开 stdout 文件即可。

然后,我们导入目标库的头文件和库文件:

include_directories(   												
  ${
    
    OMPL_INCLUDE_DIRS}
)

add_executable(ompl_test_node 
  src/ompl_test_node.cpp
)

target_link_libraries(ompl_test_node
  ${
    
    OMPL_LIBRARIES}
)

这样,我们成功引入了头文件,并将库文件成功链接到了目标可执行文件上。

2.导出自定义库

此部分参考文章:https://zhuanlan.zhihu.com/p/87738686
反过来,我们也可以让他人或将来的自己通过 find_package() 使用我们的模块。

对于导出动态库的方法,将上述add_executable改为add_library即可

add_library(omcl_ros2 SHARED 
  src/ompl_test_node.cpp
  src/fcl_test_node.cpp
)
ament_target_dependencies(omcl_ros2
  rclcpp
)

target_link_libraries(omcl_ros2
  ${
    
    OMPL_LIBRARIES}
  ${
    
    FCL_LIBRARIES}
)

install(TARGETS
  omcl_ros2
  DESTINATION lib/${
    
    PROJECT_NAME}
)

通过 install 即可将动态库安装到 lib 文件夹中。在其它包中调用的时候,就可以通过 find_package 获取到该动态库的路径。
最后再 install 头文件即可:

install(DIRECTORY 
  include/${
    
    PROJECT_NAME}
  DESTINATION include
)

猜你喜欢

转载自blog.csdn.net/qq_43557907/article/details/126755817
今日推荐