在Linux上使用CMake构建(但在安装之前),所有链接库都被添加到最终可执行文件的RPATH中。
但是,我想将 $ORIGIN/../lib:
添加到此RPATH。
到目前为止,我只能替换 RPATH,而这不是我想要的:我希望ld.so
首先查看../lib
。这就是我目前所做的事情:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:...")
虽然这有效,但它缺少一些不属于我的构建树的第三方库,而且它们不在系统目录中。
执行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上,man cmakecommands for INSTALL_RPATH_USE_LINK_PATH假装此设置将追加 链接到指定的任何CMAKE_INSTALL_RPATH内容的路径。然而, 在此版本上,启用INSTALL_RPATH_USE_LINK_PATH将替换。
嗯,不再那么肯定了:只是在CMake上验证了这一点 2.8.0,现在在两个版本上,它确实列出了cmake_install.cmake中的正确更改。这个错误可能是由于以前没有发生的 执行per-target install(),或者可能是由于其他一些更改 CMake与RPATH相关的变量。
顺便说一句,我只对为构建的文件获取工作RPATH感兴趣,就像在运行安装之前一样。我没有正确配置安装(添加安装目标等)。我是否需要研究这部分才能实现这一目标?
答案 0 :(得分:1)
如果您无法在Google上找到答案,那么答案显而易见。这似乎工作得很好:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH_USE_LINK_PATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:${INSTALL_RPATH}")
在我的系统(和CMake 3.6.1)上,似乎INSTALL_RPATH
以冒号开头,但我不会指望它。此外,由于我明显在此处设置了全球 INSTALL_RPATH
,因此可能过度指定(我还没有检查过)。