ros项目 CMakeLists.txt中添加自己的库路径

Posted 发现生活之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ros项目 CMakeLists.txt中添加自己的库路径相关的知识,希望对你有一定的参考价值。

在 ros 功能包中要使用第三方的动态库,将其放在系统默认库路径和使用绝对路径均不可取,这样的话可移植性较差,将该功能包移到其它电脑时要重新配置依赖库的路径,太麻烦了。

于是找到下面这个方法,解决了ROS功能包中添加库路径的问题。

:此法针对 ros catkin编译。

 

解决方法:

  将动态库放到功能包中,在CMakeLists.txt 中添加该库的相对路径。方法如下:

target_link_libraries( test ${catkin_LIBRARIES} ${PROJECT_SOURCE_DIR}/lib/libdemo.so)

 其中:${PROJECT_SOURCE_DIR}为当前功能包的路径。

 

例子:

   功能包 test 下的 lib 目录 下的 libdemo.so 库,添加其路径的方法如下:

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(test)


find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

# add the third-party libraries, for example lib/libdemo.so
link_directories(
    ${catkin_LIB_DIRS}  lib)

include_directories(
    ${catkin_INCLUDE_DIRS}  include )


add_executable(
    test src/test.cpp) 

target_link_libraries( test ${catkin_LIBRARIES} ${PROJECT_SOURCE_DIR}/lib/libdemo.so)

 

 参考:http://wiki.ros.org/catkin/CMakeLists.txt

下面的方法没用:

link_directories(
${catkin_LIB_DIRS} lib)

link_directories() 用于添加第三方库路径,

  其中 ,catkin_LIB_DIRS 表示创建的环境变量(必须要有,可以是任意名称,但建议此名方便理解),${catkin_LIB_DIRS} 为取该环境变量的值,

      lib 是相对于当前功能包所在路径的相对路径,此法默认以 当前功能包路径为基准添加额外的库路径。

 

以上是关于ros项目 CMakeLists.txt中添加自己的库路径的主要内容,如果未能解决你的问题,请参考以下文章

ROS文件系统

将 Makefile 转换为 CMakeLists.txt

没有使用ROS顶层CMakelists.txt,如何给所有子项目的cmake默认值?

ROS文件系统

ROS学习之CMakelists.txt和package.xml

ROS学习之CMakelists.txt和package.xml