在 Linux 上使用 CMake 构建之后(但在安装之前),所有链接库都将添加到最终可执行文件的 RPATH 中。
但是,我想在此 RPATH 前面添加。 $ORIGIN/../lib:
到目前为止,我只能替换RPATH,这不是我想要的:我想ld.so首先查看../lib. 这就是我目前所做的:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:...")
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它缺少一些额外的第三方库,这些库不属于我的构建树,并且不位于系统目录中。
这样做chrpath -l foo给了我与上面完全相同的结果INSTALL_RPATH。如果我不设置这些属性,我会得到一长串 DSO 位置,例如RPATH=/bar/baz/:/quux/等(我想添加到前面的那个)。
我尝试过使用get_property(_existing_rpath foo INSTALL_RPATH),但这给了我一个空字符串
我已阅读https://cmake.org/Wiki/CMake_RPATH_handling上的提示,并在“CMake Bugs”下注意到
至少在 CMake 2.6.4 RHEL5 上, INSTALL_RPATH_USE_LINK_PATH 的 man cmakecommands 假装此设置会将链接路径附加到指定的任何 CMAKE_INSTALL_RPATH 内容。但是,在此版本上,启用 INSTALL_RPATH_USE_LINK_PATH 将取代它。
好吧,对此不再那么确定:刚刚在 CMake 2.8.0 上验证了这一点,现在在两个版本上它都列出了 cmake_install.cmake 中的正确更改。发生此错误的原因可能是之前未执行每个目标 install(),或者可能是由于 CMake RPATH 相关变量中的一些其他更改所致。
顺便说一句,我只对为构建的文件获取有效的 RPATH 感兴趣,就像运行安装之前一样。我没有正确配置安装(添加安装目标等)。我需要研究该部分才能使其发挥作用吗?
如果你在谷歌上找不到答案,通常情况下答案是显而易见的。这似乎工作得很好:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH_USE_LINK_PATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:${INSTALL_RPATH}")
Run Code Online (Sandbox Code Playgroud)
在我的系统(和 CMake 3.6.1)上,它似乎INSTALL_RPATH以冒号开头,但我不会指望它。另外,由于我显然在这里设置了全局, INSTALL_RPATH所以它可能被过度指定(我没有检查)。
| 归档时间: |
|
| 查看次数: |
2577 次 |
| 最近记录: |