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

@executable_path/libwupienginemac.dylib

我想知道如何将 @executable_path 更改为:
  • 库的绝对路径。我看到,例如在 otool 输出中的以下内容
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    
  • @rpath 然后我可以使用 lib_xxx 管理 RPATH 的位置。我更喜欢这个选项。

  • 从文档和论坛看来,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
        )
    

    最佳答案

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

    处理此问题的另一种方法是使用 install_name_tool -id

    关于macos - 使用 CMAKE_MACOSX_RPATH 链接构建树之外的库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32133020/

    10-11 22:13
    查看更多