Cmake:如何使用cmake将rpath设置为${ORIGIN}

mtb9vblg  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(1342)

根据这个SO问题,Linux executable can't find shared library in same folder传递-Wl,-rpath,${ORIGIN}是让Linux可执行文件在与可执行文件相同的目录中搜索.so的方法。
我们使用的是cmake,所以我添加了一行

target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN})

这样做的问题是,cmake试图将九个字符序列${ORIGIN}解释为变量,并将其替换为空。
到目前为止,我试过:

$${ORIGIN}
\${ORIGIN}
$\{ORIGIN\}
$$\{ORIGIN\}
\$\{ORIGIN\}

但都不管用。我该怎么做?
--编辑--
正如@Tsyvarev的评论所指出的,在我的特定情况下,这是一个XY问题,因为cmake有直接设计来操作rpath的工具。使用这个工具,我能够得到一个解决方案。
在我的例子中,将以下三行添加到CMakeLists.txt中就成功了。

SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}")

请注意,我们的构建过程的一部分涉及将.so复制到输出文件夹,以准备构建最终的tarball工件。因此,使用-rpath=${ORIGIN}既可以在构建树中进行测试,也可以在Docker容器中最终安装可执行文件。

mkshixfv

mkshixfv1#

正如您已经注意到的,您应该使用CMAKE_INSTALL_RPATHINSTALL_RPATHINSTALL_RPATH在安装特定目标时设置rpathCMAKE_INSTALL_RPATH是全局变量,对所有目标执行相同的操作。
我也挣扎,如何逃脱$ORIGIN .但是,对我来说,它的工作原理没有逃脱它在所有:

set_target_properties(<target> PROPERTIES INSTALL_RPATH "$ORIGIN")

相关问题