在Mac上编译arm版Qt

本文介绍了在Mac M1芯片上将Qt5.15.2从x86移植到arm64的过程,包括使用CMake配置、解决依赖及编译步骤,重点在于如何通过makefile进行源码编译以适应新架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

♿︎ 引言

自从电脑换成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

  1. 打开terminal,使用homebrew(默认已有)安装依赖项

    brew install pcre2 harfbuzz freetype
    #下面这一项可能不需要,保险起见就安上
    brew install cmake ninja python
  2. 下载Qt 5.15.2的源码,通道在此

  3. 假设下载的压缩包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
    #接下来会生成很多命令,不用管
  4. 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 {,改完后保存退出

  5. 接下来开启所有进程进行编译

    #在buildir目录下
    make -j$(nproc)
  6. 上步完成后开始安装

    make install -j$(nproc)
  7. 安装完成后可以把和buildir同层目录内的qt-everywhere-src-5.15.2.tar.xzqt-everywhere-src-5.15.2给删了

  8. 此时arm64版Qt算是安装完成(buildir),接下来(可以忽略)是在CLion上的iGameMeshView工程中使用Qt

  9. 修改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)
  10. 完成


「Reference」


❃ 特别鸣谢CJgg两节课的耐心讲解 /doge

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值