【问题标题】:How to set CMAKE_INSTALL_RPATH with multiple directories?如何使用多个目录设置 CMAKE_INSTALL_RPATH?
【发布时间】:2021-11-17 08:05:15
【问题描述】:

关于CMAKE RPATH not working - could not find shared object file 问题,我了解如何为单个路径设置CMAKE_INSTALL_RPATH,但我需要为多个路径设置它。我尝试了这些使用但我没有工作:

SET( CMAKE_INSTALL_RPATH "/opt/my/lib;/other/lib" )
SET( CMAKE_INSTALL_RPATH "/opt/my/lib:/other/lib" )

关于How to set multiple RPATH directories using CMake on MacOS 的问题,我看到我可以使用分号; 为一个目标设置多个路径,但我想为所有目标设置它,而不是为每个目标设置它。对于所有目标(包括子项目),是否有等效的 set_target_properties?例如:

set_target_properties(alltargets
    PROPERTIES
    INSTALL_RPATH "/opt/my/lib;/other/lib"
)

【问题讨论】:

    标签: cmake linker dynamic-library rpath


    【解决方案1】:

    片段:

    # note: macOS is APPLE and also UNIX !
    if(APPLE)
      set_target_properties(foo PROPERTIES
        INSTALL_RPATH "@loader_path;@loader_path/...")
    elseif(UNIX)
      set_target_properties(foo PROPERTIES
        INSTALL_RPATH "$ORIGIN:$ORIGIN/...")
    endif()
    

    相关的 CMake 变量:

    相关 CMP:

    【讨论】:

      【解决方案2】:

      经过测试,使用分号作为分隔符的第一个选项似乎是工作SET( CMAKE_INSTALL_RPATH "/opt/my/lib;/other/lib" )。作为参考,有 cmake 文档,但我没有在那里找到这个答案:https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling

      我不知道的是如何自动为我的所有alltargets 使用set_target_properties 之类的东西。

      【讨论】:

      • 您引用的不是文档,而是 wiki。变量CMAKE_INSTALL_RPATH文档在这里:cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_RPATH.html。它明确地告诉变量被解释为路径的列表,并且它明确地告诉变量的设置影响所有目标INSTALL_RPATH属性。 INSTALL_RPATH 的文档告诉“此属性由变量 CMAKE_INSTALL_RPATH 的值初始化,如果它在创建目标时设置。”
      猜你喜欢
      • 2017-03-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2012-01-14
      相关资源
      最近更新 更多