在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 是相對於當前功能包所在路徑的相對路徑,此法默認以 當前功能包路徑為基准添加額外的庫路徑。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM