如何在CMAKE中设置RPATH?

问题描述 投票:0回答:4

我希望在本地构建和安装软件到

$HOME/.local/
路径,而不是系统范围的
/usr/
文件夹。该软件使用CMAKE进行编译。

安装后,软件二进制文件和库分别存储在

$HOME/.local/bin/
$HOME/.local/lib/
中。但是,当我尝试运行该程序时,它会抛出一个错误,指出找不到所需的库(顺便说一下,该库存在于
$HOME/.local/lib/
中)。

如果我将

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

请帮忙。

cmake
4个回答
29
投票

我在 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 )

如果你

include( GNUInstallDirs )
你也可以

list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} )

虽然我是 CMake 新手,所以如果有人发现上述问题,请告诉我。


3
投票

您还可以使用:

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

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


0
投票

CMAKE_BUILD_RPATH
对我有用,或者设置链接器rpah。

  • 解决方案1:在
    add_executable
  • 之前设置rpath
project(app)
set(RPATH "/lib/custom")
list(APPEND CMAKE_BUILD_RPATH ${RPATH})
...
add_executable(${PROJECT_NAME}
    ${SOURCES}
    ${HEADERS}
)
  • 解决方案2:更改链接器rpath
set(RPATH "/lib/custom")
set_target_properties(${PROJECT_NAME}
       PROPERTIES
       LINK_FLAGS "-Wl,-rpath,${RPATH}"
)
© www.soinside.com 2019 - 2024. All rights reserved.