在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。如果我不设置这些属性,我会得到很长的位置列表,例如RPATH=/bar/baz/:/quux/等(我想添加到其中)。
我试过使用get_property(_existing_rpath foo INSTALL_RPATH),但这给了我一个空字符串
我读过handling的提示,在"CMake Bugs“下面注意到
至少在CMake 2.6.4 RHEL5上,mancmakecommansforINSTALL_RPATH_USE_LINK_PATH假装这个设置会将附加到任何指定的CMAKE_INSTALL_RPATH内容的链接路径。然而,在这个版本上,启用INSTALL_RPATH_USE_LINK_PATH将取代。 嗯,对此已经不太确定了:只是在CMake 2.8.0上验证了这一点,现在在这两个版本中都列出了cmake_install.cmake中的正确更改。此错误可能是由于以前没有执行每个目标安装(),或者是由于CMake RPATH相关变量中的其他一些更改而发生的。
顺便说一句,我只对为构建的文件获得一个工作的RPATH感兴趣,就像在运行安装之前一样。我没有正确地配置安装(添加了安装目标等等)。我需要调查一下这部分才能奏效吗?
发布于 2016-10-17 07:37:03
如果你在谷歌上找不到答案,答案往往是显而易见的。这似乎挺好的:
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,所以它可能被过度指定(我还没有检查)。
https://stackoverflow.com/questions/40079424
复制相似问题