使用CMAKE_MACOSX_RPATH链接构建树

时间:2015-08-21 05:35:25

标签: macos cmake rpath

此问题是MacOS X特有的。我想将位于构建树外部的库lib_xxx链接到某个任意位置。它将位于所有系统的同一位置。默认情况下,CMake会添加依赖项,如下所示

@executable_path/libwupienginemac.dylib

我想知道如何将@executable_path更改为:

  1. 图书馆的绝对路径。我看到,例如otool输出中的以下内容

    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    
  2. @rpath然后,我可以使用lib_xxx管理RPATH的位置。我更喜欢这个选项。

  3. 从文档和论坛看起来CMAKE_MACOSX_RPATH应该解决问题并实现选项(2)。然而,下面的CMakeLists.txt仍会导致@executable_path/libwupienginemac.dylib依赖。

    cmake_minimum_required(VERSION 3.1)
    
    project(xxx_test)
    
    set(CMAKE_MACOSX_RPATH 1)
    find_library(LIB_XXX lib_xxx
        PATHS "/path/to/lib_xxx/lib"
        )
    if (NOT LIB_XXX)
        message(FATAL_ERROR ""LIB XXX not found")
     endif()
    
    add_executable(xxx_test xxx_test.cpp)
    target_link_libraries(xxx_test
        ${LIB_XXX}
    )
    # Try running the executable at once
    add_custom_target(wibut_test_run ALL
        COMMAND xxx_test
        DEPENDS xxx_test
        )
    

1 个答案:

答案 0 :(得分:0)

目前看起来CMake没有任何机制来处理这个问题。我最终将我的外部依赖项复制到$ {CMAKE_RUNTIME_OUTPUT_DIRECTORY},这适用于我的场景。

另一种处理方法是使用install_name_tool -id