我希望在本地构建和安装软件到
$HOME/.local/
路径,而不是系统范围的 /usr/
文件夹。该软件使用CMAKE进行编译。
安装后,软件二进制文件和库分别存储在
$HOME/.local/bin/
和 $HOME/.local/lib/
中。但是,当我尝试运行该程序时,它会抛出一个错误,指出找不到所需的库(顺便说一下,该库存在于$HOME/.local/lib/
中)。
如果我将
$LD_LIBRARY_PATH
设置为 $HOME/.local/lib
,程序就可以正常工作。但我不想这样做。因此,我想知道如何在使用 CMAKE 编译软件时指定 RPATH
变量(它将指向 $HOME/.local/lib
)。
请帮忙。
我在 CMakefile 中使用以下两行
set(CMAKE_MACOSX_RPATH 1)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
(只有使用 MacOSX 时才需要第一个)
CMAKE_INSTALL_RPATH
是一个预定义的列表,所以我可以看到最好做的场景
list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib )
如果你
include( GNUInstallDirs )
你也可以
list( APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_LIBDIR} )
虽然我是 CMake 新手,所以如果有人发现上述问题,请告诉我。
您还可以使用:
set(CMAKE_BUILD_RPATH "/my/libs/location")
指定运行时路径 (RPATH) 条目以添加到构建树中链接的二进制文件(对于支持它的平台)。这些条目不会用于安装树中的二进制文件。另请参阅 CMAKE_INSTALL_RPATH 变量。
CMAKE_BUILD_RPATH
对我有用,或者设置链接器rpah。
add_executable
project(app)
set(RPATH "/lib/custom")
list(APPEND CMAKE_BUILD_RPATH ${RPATH})
...
add_executable(${PROJECT_NAME}
${SOURCES}
${HEADERS}
)
set(RPATH "/lib/custom")
set_target_properties(${PROJECT_NAME}
PROPERTIES
LINK_FLAGS "-Wl,-rpath,${RPATH}"
)