抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Sephiroth1s'blog

The quieter you became,the more you are able to hear.

Qt5.15 Apple M1 折腾记录

Qt6已经支持Apple M1但是Qt5还没有正式的官方发布版本。搜索相关资料找到个链接,本文会按照这个流程做个记录,并且记录过程中遇到的bug和解决方案。

安装编译Qt5所需相关依赖

brew install pcre2 harfbuzz freetype

安装编译Qt Creator相关依赖

brew install cmake ninja python

llvm不建议从源码安装,浪费时间,并且也没有必要,因为后续如果需要编译qt creator 中的某个插件是需要qt定制过的llvm,所以这里推荐使用

brew install llvm@11

上面的@11表示安装的版本号为11。实际保存的路径是/opt/homebrew/opt/llvm@11 ,博主使用的是这个版本。

编译Qt5.15.x

  • 下面描述的过程都是连续操作。请勿随意切换目录。

  • 下载并且切换到特定分支,比较费时间,其中WebEngine模块比较占地方,我这边下完有4G左右,其他的都小于1G。

    git clone git://code.qt.io/qt/qt5.git
    cd qt5
    git checkout 5.15
  • 进入到上面clone时创建的qt5目录执行下面的命令。

    ./init-repository
  • 在Qt源码目录之外创建个文件夹,配置相关编译参数

    cd ..
    mkdir qt5-5.15-macOS-release
    cd qt5-5.15-macOS-release
    ../qt5/configure -release -prefix ./qtbase -nomake examples -nomake tests QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -skip qt3d -skip qtwebengine

    最后的命令,建议直接复制粘贴,其中跳过了qt3d和qtwebengine的编译,目前还没有支持ARM64。输出信息的开头会有如下信息。我这边是clang的版本比教程的新,也是可以编译成功的。

    Build type: macx-clang (arm64, CPU features: neon crc32)
    Compiler: clang (Apple) 13.0.0
  • 编译,时间比编译llvm少,有错误建议使用make -j1比较好找错误信息,下面两个是我遇到的问题。解决后编译成功。Designer等 会在qt5-5.15-macOS-release/qtbase/bin

    make -j15
  • 编译错误1 qiosurfacegraphicsbuffer.h:54:32: error: unknown type name 'CGColorSpaceRef'

    搜了下是已知问题,已经有patch,在qtbase源码应用这个patch就行了

    如果嫌麻烦,可以直接复制include <CoreGraphics/CGColorSpace.h>加到下面这个文件中。(其实就是少写了个头文件)

    qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h

    diff截图

  • 编译错误2 xcrun: error: unable to find utility "actool", not a developer tool or in PATH 大致会有缺少actool类似的错误。光装Command Line Tools是不够的,还需要装那个浪费空间的XCode,并且需要Xcode > Preferences > Locations里面设置下Command Line Tools版本,如下图。

    或者使用命令行方式

    sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

    XCode设置

编译Qt Creator

  • 下载源码切换分支,并新建一个qt-creator-4.14-build文件夹,接着上面的连续操作

    cd ..
    git clone git://code.qt.io/qt-creator/qt-creator.git
    cd qt-creator
    git checkout 4.14
    git submodule update --init --recursive
    cd ..
    mkdir qt-creator-4.14-build
    cd qt-creator-4.14-build
  • 配置,下面两个二选一即可。如上面提到的可以使用@11这种形式来指定通过homebrew安装过的版本。

    With LLVM (Clang code model):

    cmake -DCMAKE_BUILD_TYPE=Release -G Ninja "-DCMAKE_PREFIX_PATH=../qt5-5.15-macOS-release/qtbase/;/opt/homebrew/opt/llvm" -DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3 ../qt-creator

    Without LLVM:

    cmake -DCMAKE_BUILD_TYPE=Release -G Ninja "-DCMAKE_PREFIX_PATH=../qt5-5.15-macOS-release/qtbase/" -DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3 ../qt-creator
  • 开始编译,输入ninja

  • 编译错误error: assigning to 'clang::format::FormatStyle::AlignConsecutiveStyle' from incompatible type 'bool',根据上面的评论clang-fromat这个插件没有编译成功。可选的方案有两个

    1. 手动编译qt修改过的LLVM再编译一下。时间太久不想折腾了意义不大,习惯用vscodeclang-format插件来处理代码
    2. 跳过该模块的编译,-DBUILD_PLUGIN_CLANGFORMAT=OFF,在上面的二选一命令中加入这句就行。
    cmake -DCMAKE_BUILD_TYPE=Release -G Ninja "-DCMAKE_PREFIX_PATH=../qt5-5.15-macOS-release/qtbase/;/opt/homebrew/opt/llvm@11" -DPYTHON_EXECUTABLE=/opt/homebrew/bin/python3 ../qt-creator -DBUILD_PLUGIN_CLANGFORMAT=OFF
  • 编译完成qt-creator-4.14-build找到Qt Creator

    如果不能打开可以使用下面这个命令试一下。建议先备份好Qt Creator再执行下面的命令。执行完下面的命令反而会导致打不开,或者是打开只有默认的英文。博主这边没遇到无法打开的问题,只是对正常启动的Qt Creator试了下这个命令。

    ../qt5-5.15-macOS-release/qtbase/bin/macdeployqt Qt\ Creator.app

配置Qt Creator

  • 能打开但是选择无法选择工具链,需要配置(可选的那个是我配置好的,没配置之前不可选的)

    工具链无法选择

    1. 首选项-->Kits-->Qt Versions里面手动添加qmake路径,具体路径在前面构建的Qt目录下qt5-5.15-macOS-release/qtbase/bin/qmake

    2. 首选项-->Kits-->CMake添加cmake路径。路径可以选择brew安装的cmake路径/opt/homebrew/bin/camke

    3. 首选项-->Kits-->Kits选择前面的工具链,如下图

      配置kits

  • 编译工程报错Undefined symbols for architecture x86_64

    1. 在工程的.pro文件里面加入QMAKE_APPLE_DEVICE_ARCHS=arm64重新构建
    2. 或者在编译Qt Creator时配置cmake添加-DCMAKE_OSX_ARCHITECTURES="arm64"这个参数重新构建(未验证)
  • 编译运行成功截图hello world

不折腾(updated 2024)

  • 直接 brew install qt@5
  • 建议用 cmake 的指定下外部库的 cmake 路径,不确定路径的可以用 brew info qt@5 找一下
    set(CMAKE_PREFIX_PATH "/opt/homebrew/Cellar/qt@5/5.15.13_1/")