如何在CMAKE中设置RPATH?

33

我希望将软件构建并安装到本地的$HOME/.local/路径而不是系统范围的/usr/文件夹中。该软件使用CMAKE进行编译。

安装后,软件二进制文件和库将分别存储在$HOME/.local/bin/$HOME/.local/lib/中。但是,当我尝试运行程序时,它会抛出一个错误,指出所需的库未找到(顺便说一下,该库存在于$HOME/.local/lib/中)。

如果我设置$LD_LIBRARY_PATH$HOME/.local/lib,程序可以正常工作。但我不想这样做。因此,我想知道如何在使用CMAKE编译软件时指定RPATH变量(它将指向$HOME/.local/lib)。

请帮忙解决问题。


文档:https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling - Gabriel Devillers
3个回答

28

我在CMakefile中使用以下两行代码:

set(CMAKE_MACOSX_RPATH 1)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

(仅在使用MacOSX时需要第一个)


8
CMAKE_INSTALL_RPATH 是一个预定义的列表,所以我可以看到有些情况下最好使用 list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib )。如果你包含了 GNUInstallDirs,那也可以使用 list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} )。但是我只是个 CMake 新手,刚刚开始接触,如果有人发现上面的问题,请告诉我。 - PfunnyGuy
2
@PfunnyGuy,感谢您提供list(APPEND ...)的建议。也许可以将其作为另一种备选答案呢? - Matt Messersmith

6

CMAKE_INSTALL_RPATH 是一个预定义的列表,因此我可以看到一些情况下最好这样做

list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib )

如果你 include(GNUInstallDirs),同时你也可以

list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} )

我是一个CMake的新手,如果有人发现上述问题,请告诉我。


2

你也可以使用:

set(CMAKE_BUILD_RPATH "/my/libs/location")

指定运行时路径(RPATH)条目以添加到在构建树中链接的二进制文件(对于支持它的平台)。这些条目不会用于安装树中的二进制文件。另请参阅CMAKE_INSTALL_RPATH变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接