macos - 使用 CMAKE_MACOSX_RPATH 链接构建树外部的库

标签 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 然后我可以使用 RPATH 管理 lib_xxx 的位置。我更喜欢这个选项。

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

相关文章:

使用 -L 添加 link_library 时,Cmake 未设置 RPATH

node.js - 没有这样的文件或目录 .../meteor/examples

cocoa - NSClipView 在 setDrawsBackground 上出现重影、伪影、痕迹 :NO

list - SwiftUI 列表行填充宽度

makefile - 从 makefile 到 CMake 的通用规则

c++ - 检查工作 CXX 编译器 :/cygdrive/c/cygwin64/bin/clang++ -- broken

c# - 在 C# 中处理 C++ .dll 调用的结果

c++ - .pro 文件中的 RPATH 不起作用

macos - "Vault"、"Consul"和 "Terraform"[Hashicorp 产品] 无法打开,因为在 mac、Catalina 上无法验证开发者问题

macos - mac os x 上的 Cmake,使用完整路径链接库