xcode - CMake + Xcode : how to select arm64 vs x86_64 libraries?

标签 xcode cmake apple-m1 fat-binaries

我们有一个针对 Xcode 的基于 CMake 的项目,并且必须包含一个预编译的第 3 方库,该库提供单独的 arm64x86_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 flagcmake 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/

相关文章:

swift - 在 Swift 中为 macOS 构建框架时出错

ios - 我遇到了一个奇怪的 SpriteKit AdMob 错误,有点令人困惑

boost - 如何将 BOOST_ROOT 和 BOOST_LIBRARY 传递给 CMake?

c++ - 当我在调用project()之前设置(CMAKE_EXECUTABLE_SUFFIX)时,CMake中的Emscripten不会输出html文件。为什么?我该如何修复它?

ruby-on-rails - 在 M1 芯片上运行 rails 时出错(Apple Silicon)

r - Snowflake 不适用于 M1 Macbook Pro "Can' t open lib”。任何解决方案或更新?

ios - CollectionViewCells 随滚动变化

c++ - Windows 上的 CMake - 使用导入的目标 OpenGL::GLU 时 FindOpenGL.cmake 中的错误?

xcode - m1 mac 能否运行 watch 应用程序?

ios - 我有一个 UIAlertView 反复显示找不到源的问题