gpt4 book ai didi

cmake - 如何在 MacOS 上使用 CMake 设置多个 RPATH 目录

转载 作者:行者123 更新时间:2023-12-04 12:45:40 24 4
gpt4 key购买 nike

我们如何在 MacOS 上的 CMake 的目标上设置多个 RPATH 目录?在 Linux 上,我们可以只使用冒号分隔的列表:

set_target_properties(mytarget
PROPERTIES
INSTALL_RPATH "\$ORIGIN/../lib:\$ORIGIN/../thirdparty/lib"
)

在 MacOS 上,我们技术上可以添加一个冒号分隔的列表和 otool -l应该显示它,但不搜索这些目录:
set_target_properties(mytarget
PROPERTIES
INSTALL_RPATH "@loader_path/../lib:@loader_path/../thirdparty/lib"
)

通常,如果我要在 MacOS 上有多个 RPATH 目录,我会发送多个链接器标志,这些标志将与 otool -l 分开显示。 .就像是:
g++-mp-4.7 mytarget.cpp -o mytarget -Wl,-rpath,@loader_path/../lib,-rpath,@loader_path/../thirdparty/lib

这使:
Load command 15
cmd LC_RPATH
cmdsize 32
path @loader_path/../lib (offset 12)
Load command 16
cmd LC_RPATH
cmdsize 48
path @loader_path/../thirdparty/lib (offset 12)

如何使用 CMake 重新创建此行为?

最佳答案

根据documentation ,路径不应该用冒号分隔,而应该用 分号 :

set_target_properties(mytarget
PROPERTIES
INSTALL_RPATH "@loader_path/../lib;@loader_path/../thirdparty/lib"
)

或者,使用命令 set 让 CMake 处理分隔符:
set(MY_INSTALL_RPATH
"@loader_path/../lib"
"@loader_path/../thirdparty/lib"
)
set_target_properties(mytarget
PROPERTIES
INSTALL_RPATH "${MY_INSTALL_RPATH}"
)

编辑: (感谢 Tsyvarev 的评论)

或者,使用命令 set_property ,它接受多值属性:
set_property(
TARGET mytarget
PROPERTY INSTALL_RPATH
"@loader_path/../lib"
"@loader_path/../thirdparty/lib"
)

关于cmake - 如何在 MacOS 上使用 CMake 设置多个 RPATH 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40146437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com