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

Cmake:如何使用Cmake将rpath设置为${ORIGIN},cmake,escaping,rpath,Cmake,Escaping,Rpath,根据这个SO问题,传递-Wl,-rpath,${ORIGIN}是获取Linux可执行文件以在与可执行文件相同的目录中搜索.SO的方法 我们使用的是cmake,所以我添加了一行表单 target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN}) 到CMakeLists.txt。问题在于,cmake试图将九个字符的序列${ORIGIN}解释为一个变量,并将其替换为零 到目前为止,我已经尝试: $${ORIGIN} \${ORIGIN} $\

根据这个SO问题,传递
-Wl,-rpath,${ORIGIN}
是获取Linux可执行文件以在与可执行文件相同的目录中搜索
.SO
的方法

我们使用的是cmake,所以我添加了一行表单

target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN})
到CMakeLists.txt。问题在于,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容器中最终安装可执行文件。

CMake有指定rpath的特殊方法。请参阅wiki和。@Tsyvarev谢谢您提供的信息,看起来我在试图解决XY问题。我对这个问题进行了编辑,以便更具体地说明我的问题,如果您输入您的评论作为答案,我将接受。