cmake:如何在安装过程中保留库的路径

cmake: how to keep path to libraries during installation

我有一些可执行文件依赖于在源中设置相对路径的配置文件。

可执行文件链接到在同一项目中创建的库。

我希望实现的是在安装后立即使用可执行文件,即安装会将可执行文件、配置文件和库复制到合适的位置,并将可执行文件链接到库.

我目前有:

install(TARGETS ${test_executables}  ${PROJECT_NAME} 
    RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
    ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
    LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/plot" 
    DESTINATION .)       

${PROJECT_NAME}是库,plot是配置文件所在的文件夹。

安装后发生的情况是所有文件都在安装文件夹中的正确位置,但可执行文件找不到库。

ps:

我之前尝试添加这个:

set(CMAKE_SKIP_BUILD_RPATH  FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # tried also with TRUE
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)                                                
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)

但这没有用

目标创建时间INSTALL_RPATH target's property which affects on RPATH for installed executable. This property is set to value of variable CMAKE_INSTALL_RPATH

因此,变量CMAKE_INSTALL_RPATH需要在之前设置 add_executable()调用使目标生效。


大多数全局变量和目标未知命令仅在目标创建时影响目标

也有例外,例如命令 include_directories(),它会影响在当前目录中创建的所有目标。但是 在创建目标之前准备好所有内容 可能是一个很好的做法。

我遇到了同样的问题,刚刚添加

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

add_libraryadd_executable 命令之前,然后它起作用了。

您可以找到更多详细信息 here