cmake - Cmake:如何使用 cmake 将 rpath 设置为 ${ORIGIN}
问题描述
根据这个 SO question,Linux 可执行文件在同一文件夹中找不到共享库传递-Wl,-rpath,${ORIGIN}
是让 Linux 可执行文件.so
在与可执行文件相同的目录中搜索 s 的方法。
我们正在使用 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 容器中可执行文件的最终安装。
解决方案
推荐阅读
- linux - 如何使用 perl 脚本和 ssh 在远程 linux 服务器中运行 bash 或 shell 脚本
- ruby-on-rails - 在 REST API 中返回 HTTP 422 时可以区分情况吗?
- python - 要列出的字节字符串
- angular - 获取不同语言的 Angular 错误
- c# - SendOrPostCallback 行为
- azure - 如何使用 azure 流分析进行多输入和多输出
- javascript - 我想从数据库中检索 updated_at 并在 javascript 中存储为 H:M:S
- bash - /bin/sh:-c:第 0 行:意外标记“完成”附近的语法错误
- python - 将字典转换为元组列表
- xml - 为 Allegro WebAPI 创建 SOAP 请求