♿︎ 引言
自从电脑换成Mac后就需要面对芯片架构不同带来的众多问题,市场上还是有很多软件只适配x86而不支持arm。当然这段时间我体验下来,arm架构采用的是精简指令集,在续航方面全面吊打x86,一般来说不插电工作一天绰绰有余。当然缺点也很明显,就是软件市场依然不是很友好,比如说VS(坦白地说,VS for mac就是微软做出来嘲笑苹果的)。虽然很多软件表示已经在开发arm版,但还是需要一定时间的。这也是本文存在的原因。
导师那边有个框架之前我都是在老电脑的VS上用的(之前也只有VS版),然而最近发布的新版本使用了CMake。众所周知,CMake是一款跨平台编译工具,像CLion就是使用CMake进行编译的。Mac人狂喜,然而被学长告知框架所需的Qt目前只支持x86,arm版的需要自己编译。可以自己编译的关键一点是,Qt是开源的,我们可以获得其源码。那么简单地来说,虽然直接下载下来的Qt是x86版的,但只要将其源码在自己电脑编译一遍,生成的就是适配自己电脑的版本啦。
这就不得不提到makefile
文件。该文件是Linux下的一个工程管理文件,类似CMake文件,指出了如何编译软件的规则,有着自己专门的语法。但我目前也不是很了解,只是刚刚入门,以后有机会的话再讲吧。
版本信息
- Qt 5.15.2
- CLion 2021.3.4
- MacOS Monterey 12.3
⩙ BUILD
-
打开terminal,使用homebrew(默认已有)安装依赖项
brew install pcre2 harfbuzz freetype #下面这一项可能不需要,保险起见就安上 brew install cmake ninja python
-
下载Qt 5.15.2的源码,通道在此
-
假设下载的压缩包qt-everywhere-src-5.15.2.tar.xz所在文件夹的绝对路径为
path
,在terminal内cd path #解压压缩包 x qt-everywhere-src-5.15.2.tar.xz #创建文件夹buildir mkdir buildir cd buildir #设置arm64版编译并生成makefile ../qt-everywhere-src-5.15.2/configure -release -prefix ./outDir -nomake examples -nomake tests QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -skip qt3d -skip qtwebengine #接下来会生成很多命令,不用管
-
在
make
命令之前我们需要消除两个问题(当然直接打开文件改也行,下面是在terminal中用vim修改)-
首先打开第一个更改文件,path是上面那个绝对路径
vim path/qt-everywhere-src-5.15.2/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h
找到下面的语句块
#include <qpa/qplatformgraphicsbuffer.h> #include <private/qcore_mac_p.h>
进入vim的插入模式,在该语句块前加上
#include <CoreGraphics/CGColorSpace.h>
最后应该是这样子的
改完后保存退出:esc+输入
:wq
-
打开第二个更改文件
vim path/qt-everywhere-src-5.15.2/qtlocation/include/QtLocation/5.15.2/QtLocation/private/../../../../../src/location/declarativemaps/qdeclarativepolylinemapitem_p_p.h
输入
:set number
后显示行号,然后将523行处的typedef struct {
改为typedef struct MapPolylineEntry {
,改完后保存退出
-
-
接下来开启所有进程进行编译
#在buildir目录下 make -j$(nproc)
-
上步完成后开始安装
make install -j$(nproc)
-
安装完成后可以把和buildir同层目录内的qt-everywhere-src-5.15.2.tar.xz与qt-everywhere-src-5.15.2给删了
-
此时arm64版Qt算是安装完成(buildir),接下来(可以忽略)是在CLion上的iGameMeshView工程中使用Qt
-
修改iGameMeshView的cmake文件
# MacOS elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") message(STATUS "编译器是AppleClang") #设置QT的目录 set(Qt5Core_DIR path/buildir/outDir/lib/cmake/Qt5Core) set(Qt5Gui_DIR path/buildir/outDir/lib/cmake/Qt5Gui) set(Qt5OpenGL_DIR path/buildir/outDir/lib/cmake/Qt5OpenGL) set(Qt5Widgets_DIR path/buildir/outDir/lib/cmake/Qt5Widgets)
-
完成
「Reference」
-
[Qt] Fix missing Cocoa include:https://github.com/microsoft/vcpkg/pull/21056/commits/99582d154236b0e7af70cadef8420c4f25829f61
❃ 特别鸣谢CJgg两节课的耐心讲解 /doge