You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止CMake将库导出目录添加至可执行文件的RPath

解决CMake自动添加库构建路径到RPATH的问题

我来帮你搞定这个CMake RPATH的问题——你碰到的是CMake的默认行为:它会自动把依赖库的构建输出路径加到可执行文件的RPATH里,方便调试阶段直接运行程序,但这确实会干扰你想要的$ORIGIN/.路径设置。这里有两种实用的解决方法:

方法一:全局禁用自动构建RPATH

在你的主CMakeLists.txt里添加这两行配置,直接关掉CMake自动添加构建路径到RPATH的功能:

# 禁止CMake自动将依赖库的构建路径添加到RPATH
set(CMAKE_SKIP_BUILD_RPATH TRUE)
# 保证安装阶段的RPATH设置不受影响(如果后续需要安装程序的话)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

这样全局设置后,你之前指定的CMAKE_BUILD_RPATH $ORIGIN/.就能正常生效,不会被自动添加的路径干扰。

方法二:针对单个目标单独配置(更推荐)

如果你不想全局修改,只想给特定的可执行文件设置RPATH,可以在src目录的CMakeLists.txt里,给test这个可执行目标单独配置:

add_library(testlib SHARED inlib.cpp)
add_executable(test main.cpp)

# 给test目标禁用自动添加构建路径到RPATH的功能
set_target_properties(test PROPERTIES SKIP_BUILD_RPATH TRUE)
# 为test目标设置你需要的自定义RPATH
set_target_properties(test PROPERTIES BUILD_RPATH "$ORIGIN/.")

target_link_libraries(test testlib)

这种方式更灵活,不会影响项目里其他目标的RPATH设置。

验证方法

修改完CMake配置后,重新构建项目,然后用下面的命令查看可执行文件的RPATH:

readelf -d bin/release/test | grep RPATH

正常情况下,输出里应该只会看到$ORIGIN/.,而不会再出现/home/?????/test/lib/release这类自动添加的路径了。

内容的提问来源于stack exchange,提问作者trBlueJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:09:48