如何使用 CMake 正确设置动态库路径?

How to correctly set dynamic lib path using CMake?

我正在尝试在 Mac 上使用 OpenMP

编译后,当运行二进制文件时,

我明白了

dyld: Library not loaded: @rpath/libomp.dylib
  Referenced from: ./lab1
  Reason: image not found
[1]    64552 trace trap  ./lab1

我使用 otool 找出它期望的路径。

otool -L lab1
lab1:
        @rpath/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

所需的库 libomp.dylib 位于路径 /usr/local/opt/llvm/lib

如何让二进制文件可以找到它?

尝试使用 CMake POST_BUILD 操作将所需路径添加到可执行文件的 rpaths:

add_custom_command(TARGET lab1 
    POST_BUILD COMMAND 
    ${CMAKE_INSTALL_NAME_TOOL} -add_rpath /usr/local/opt/llvm/lib
    $<TARGET_FILE:lab1>)

这仅在 lab1 是使用 add_executable 创建的 CMake 可执行目标时有效。