4

这个问题是 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_xxxusing的位置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
    )
4

1 回答 1

0

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

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

于 2015-08-24T19:02:37.700 回答