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
编译错误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
编译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
这个插件没有编译成功。可选的方案有两个- 手动编译qt修改过的LLVM再编译一下。时间太久不想折腾了意义不大,习惯用
vscode
的clang-format
插件来处理代码 - 跳过该模块的编译,
-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修改过的LLVM再编译一下。时间太久不想折腾了意义不大,习惯用
编译完成
qt-creator-4.14-build
找到Qt Creator
如果不能打开可以使用下面这个命令试一下。建议先备份好
Qt Creator
再执行下面的命令。执行完下面的命令反而会导致打不开,或者是打开只有默认的英文。博主这边没遇到无法打开的问题,只是对正常启动的Qt Creator
试了下这个命令。../qt5-5.15-macOS-release/qtbase/bin/macdeployqt Qt\ Creator.app
配置Qt Creator
能打开但是选择无法选择工具链,需要配置(可选的那个是我配置好的,没配置之前不可选的)
在
首选项-->Kits-->Qt Versions
里面手动添加qmake
路径,具体路径在前面构建的Qt目录下qt5-5.15-macOS-release/qtbase/bin/qmake
在
首选项-->Kits-->CMake
添加cmake
路径。路径可以选择brew
安装的cmake
路径/opt/homebrew/bin/camke
在
首选项-->Kits-->Kits
选择前面的工具链,如下图
编译工程报错
Undefined symbols for architecture x86_64
- 在工程的.pro文件里面加入
QMAKE_APPLE_DEVICE_ARCHS=arm64
重新构建 - 或者在编译
Qt Creator
时配置cmake
添加-DCMAKE_OSX_ARCHITECTURES="arm64"
这个参数重新构建(未验证)
- 在工程的.pro文件里面加入
编译运行成功截图
不折腾(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/")