我们有一个针对 Xcode 的基于 CMake 的项目,并且必须包含一个预编译的第 3 方库,该库提供单独的 arm64
和 x86_64
二进制文件。
我们现在要做的就是简单地附加两个二进制文件,例如
add_library( someLib INTERFACE )
add_library( someLib_x64 STATIC IMPORTED )
set_target_properties(
someLib_x64
PROPERTIES
IMPORTED_LOCATION_RELEASE "path/to/x64/libsomeLib.a"
)
add_library( someLib_arm STATIC IMPORTED )
set_target_properties(
someLib_arm
PROPERTIES
IMPORTED_LOCATION_RELEASE "path/to/arm/libsomeLib.a"
)
target_link_libraries(
someLib
INTERFACE
someLib_x64
someLib_arm
)
这似乎会导致两种架构的有效编译(为“任何 Mac(Apple Silicon、Intel)”构建),但是,当每个架构提示另一个架构时,它会导致一堆链接器警告。
ld: warning: ignoring file /path/to/x64/libsomeLib.a, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
反之亦然。
有什么更准确的方法可以避免链接器警告?我找不到适用的生成器表达式来更改链接路径?
最佳答案
已编辑,我之前误解了这一点。我认为你有 3 个选择
- 抑制错误,错误实际上不会影响任何事情,所以最简单的方法
add_link_option("-w")
忽略它,或者只是更改目标的链接选项
- 尝试最新的 cmake 概念
IMPORTED_TARGET
,看起来完全符合你的需求,但需要新的cmake版本 - 尝试从源代码编译通用库,这是一些例子 change flag或cmake official example ,但这看起来需要另一个项目来获取库的源代码
更新:接受的答案:
根据此处链接的 IMPORTED_TARGET
文档,它显示您可以在库路径中使用符号 $(CURRENT_ARCH)
,该符号在链接时由 Xcode 解释。
完美运行。
关于xcode - CMake + Xcode : how to select arm64 vs x86_64 libraries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69578110/