首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Xcode 新构建系统与 cmake 3.19版本兼容性解决方案

Xcode 新构建系统与 cmake 3.19版本兼容性解决方案

作者头像
酷酷的哀殿
发布2021-03-03 15:35:48
发布2021-03-03 15:35:48
3.8K00
代码可运行
举报
文章被收录于专栏:酷酷的哀殿酷酷的哀殿
运行总次数:0
代码可运行

Xcode 新构建系统 与 cmake 的兼容性解决方案

什么是 Xcode 构建系统

`build system`[1] 是一套将源码和资源文件转为 APP 的工具。

比如,当我们进行点击下图的运行按钮(Run Button)** (▶️)时,Xcode就会调用 Build System 进行 APP 的构建过程 。

工具栏

除此外,当我们使用命令行通过 xcodebuild 进行 build archive 操作时,都依赖 build system 完成工作。

Xcode 目前支持两套 build system, 因为New Build System 的构建速度更快和错误检测更多。所以,从 Legacy Build System切换到 New Build System 后,可能会存在无法构建的情况。

如何切换 构建系统

我们可以通过下面两图所示的方法切换 build system

image-20210212230726382

image-20210212230749061

什么是 cmake

CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的 makefile 或者 projec t文件,能测试编译器所支持的C++特性,类似UNIX下的automake。

cmake 兼容性问题

cmake 3.19[2] 版本开始,`Xcode generator`[3] 会尝试默认启用 XcodeNew Build System

对于部分不支持new build system 的项目,会出现下面的警告或者报错:

Policy CMP0114 is not set to NEW [4] 警告:

代码语言:javascript
代码运行次数:0
运行
复制
    "Policy CMP0114 is not set to NEW.  "
      "In order to support the Xcode \"new build system\", "
      "this project must be updated to set policy CMP0114 to NEW."
      "\n"
      "Since CMake is generating for the Xcode \"new build system\", "
      "ExternalProject_Add will use policy CMP0114's NEW behavior anyway, "
      "but the generated build system may not match what the project intends."

构建 compiler-rt 报错:

代码语言:javascript
代码运行次数:0
运行
复制
CMake Error in ~/swift-source/llvm-project/pstl/CMakeLists.txt:
  The custom command generating

    ~/swift-source/build/Xcode-2023/llvm-macosx-x86_64/projects/compiler-rt/lib/builtins/outline_atomic_helpers.dir/outline_atomic_cas1_1.S

  is attached to multiple targets:

    clang_rt.cc_kext_arm64e_osx
    clang_rt.builtins_arm64e_osx
    clang_rt.cc_kext_arm64_osx
    clang_rt.builtins_arm64_osx

  but none of these is a common dependency of the other(s).  This is not
  allowed by the Xcode "new build system".

兼容性解决方案

为了避免报错,我们可以通过添加参数 -T buildsystem=1 避免

示例:

image-20210212225559559

参考资料

[1]

build system: https://help.apple.com/xcode/mac/11.4/#/dev5948b27d3

[2]

3.19: https://cmake.org/cmake/help/v3.19/release/3.19.html#id8

[3]

Xcode generator: https://cmake.org/cmake/help/v3.19/generator/Xcode.html#generator:Xcode

[4]

Policy CMP0114 is not set to NEW. : https://github.com/Kitware/CMake/blob/acb33d0904121f10891cb3aa0622b11d4e527304/Modules/ExternalProject.cmake

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 酷酷的哀殿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Xcode 新构建系统 与 cmake 的兼容性解决方案
    • 什么是 Xcode 构建系统
    • 如何切换 构建系统
    • 什么是 cmake
    • cmake 兼容性问题
    • 兼容性解决方案
      • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档