侧边栏壁纸
博主头像
银河驿站博主等级

行动起来,活在当下

  • 累计撰写 85 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CMAKE与RPATH

Administrator
2022-09-28 / 0 评论 / 0 点赞 / 447 阅读 / 2508 字

https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
https://cmake.org/pipermail/cmake/2008-January/019290.html
https://www.technovelty.org/linux/exploring-origin.html
https://cmake.cmake.narkive.com/bEic9mqt/rpath-and-origin

在CMake中,事情则有些不同。由于CMake需要包揽软件安装的事宜,因此CMake使用两个变量来控制RPATH:INSTALL_RPATH和BUILD_RPATH。
设置的办法是:

SET_TARGET_PROPERTIES(target PROPERTIES INSTALL_RPATH "$ORIGIN;/another/run/path")

set(CMAKE_SKIP_BUILD_RPATH FALSE) # 编译时加上RPATH
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # 编译时RPATH不使用安装的RPATH
set(CMAKE_INSTALL_RPATH “”) # 安装RPATH为空
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) # 安装的执行文件不加上RPATH

SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH “${ORIGIN}/…/lib”)

SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH “${ORIGIN}”)

3.14
set(CMAKE_INSTALL_RPATH $ORIGIN)

对于第一个变量CMAKE_SKIP_RPATH,简单的来说,就是强制CMake不在构建期间和安装install期间给你加上它所认为的RPATH.

cmake … -DCMAKE_SKIP_RPATH=TRUE
第二个和第三个变量也比较简单,就是分别在构建期间和安装期间不允许CMake给你加入相关RPATH

cmake … -DCMAKE_SKIP_BUILD_RPATH=TRUE
cmake … -DCMAKE_SKIP_INSTALL_RPATH=TRUE

centos系统测试,该方法设置有效,不过EXE中$$ORIGIN还是$ORIGIN需要根据系统不同尝试

SET (CMAKE_SHARED_LINKER_FLAGS
“${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath,‘$ORIGIN/…/xxx’” )

SET (CMAKE_EXE_LINKER_FLAGS
“${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,‘$ORIGIN/…/xxx/’” )

0

评论区