【问题标题】:cmake: how to keep path to libraries during installationcmake:如何在安装过程中保持库的路径
【发布时间】:2016-02-02 15:28:23
【问题描述】:

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

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

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

我目前拥有的:

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)

但这不起作用

【问题讨论】:

  • ldd <executable> 的输出是什么?
  • @Tsyvarev "libamd_clmc_dmp.so => not found", amd_clmc_dmp 是包中编译的库
  • 嗯,变量CMAKE_INSTALL_RPATH 仅影响INSTALL_RPATH 属性在目标创建时间。你设置CMAKE_INSTALL_RPATH变量之前add_executable()调用吗?
  • @Tsyvarev 它有效!谢谢 !如果你回答这个问题,我很乐意验证它

标签: cmake installation shared-libraries ldd


【解决方案1】:

INSTALL_RPATH 目标的属性会影响已安装可执行文件的 RPATH。此属性设置为变量CMAKE_INSTALL_RPATH在目标创建时间的值。

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


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

有一些例外,例如命令include_directories(),它会影响在当前目录中创建的所有目标。但是在创建目标之前准备好一切可能是一个好习惯。

【讨论】:

    【解决方案2】:

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

    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2015-04-20
      • 2011-10-06
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多