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

时间:2019-09-12 23:23:22

标签: cmake escaping rpath

根据这个SO问题,Linux executable can't find shared library in same folder传递 restart = "n" if shuffle_user == 'y': random.shuffle(soccer_teams) print("List after first shuffle: ", soccer_teams) random.shuffle(soccer_teams) print("List after second shuffle: ", soccer_teams) input("Run Again? Y/N: ").lower() 是使Linux可执行文件在与可执行文件相同的目录中搜索-Wl,-rpath,${ORIGIN}的方法。

我们正在使用cmake,所以我要添加一行表格

.so

至CMakeLists.txt。这样做的问题是cmake试图将九个字符序列target_link_options(Executable PRIVATE -Wl,-rpath=${ORIGIN}) 解释为变量,然后将其替换为空。

到目前为止,我已经尝试过:

${ORIGIN}

没有一个有效。我该怎么做?

-编辑-

正如@Tsyvarev的评论所指出的,事实证明,在我的特定情况下,这是一个XY问题,因为cmake具有直接设计用来操纵rpath的功能。有了这个,我就能找到解决方案。

就我而言,将以下三行添加到CMakeLists.txt即可达到目的。

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

请注意,我们构建过程的一部分包括将SET(CMAKE_SKIP_BUILD_RPATH FALSE) SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) SET(CMAKE_INSTALL_RPATH "$\{ORIGIN\}") 复制到输出文件夹,以准备构建最终的tarball工件。因此,使用.so既可以在构建树中进行测试,又可以在Docker容器中最终安装可执行文件。

0 个答案:

没有答案