MacOS Catalina 从源码构建Qt6.2开发库之01: 编译Qt6.2源代码

news2024/11/26 12:29:52

安装xcode, cmake, ninja

 brew install node

mac下安装OpenGL库并使之对各项目可见

macOS上安装OpenGL通常涉及到安装一些依赖库,如MGLGLUT或者是GLEW等,同时确保LLVMOpenGL框架和相关工具链的兼容性。以下是一个基本的安装步骤,你可以在终端中执行:

  1. 安装Homebrew(如果还没有安装的话):
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  2.  
  3. 安装MGLMac上的OpenGL开发库):
    brew install mgl

  4.  
  5. 安装GLUTOpenGL Utility Toolkit):
    brew install freeglut




  6. 对于较旧的系统,你可能需要安装GLUT的较旧版本:
    brew install freeglut --with-contrib

  7.  
  8. 安装GLEWOpenGL Extension Wrangler Library):
    brew install glew

  9.  
  10. 配置你的项目
    每个步骤之后,确保你的工作目录下有相应的头文件和库文件路径。你可以通过在.pro文件(对于Qt项目)或适当的地方设置C_INCLUDE_PATHLIBRARY_PATH环境变量来设置路径。
  11. 添加环境变量
    export CPPFLAGS="-I/usr/local/opt/glew/include"
  12. export LDFLAGS="-L/usr/local/opt/glew/lib"




  13. 如果你需要重复使用这些环境变量,可以将它们添加到你的.bash_profile.zshrc文件中。
  14. 编译和链接你的程序
    在编译和链接你的OpenGL程序时,确保你的构建系统(如CMakeMakefileIDE)能够找到这些库和头文件。

解压qt-everywhere-src-6.2.0.tar.xz到/Volumes/MacOS/Program/, 将目录名改为qt6.2.0

终端窗口进入/Volumes/MacOS/Program/qt6.2.0/,执行:

./configure

cmake —build . —parallel

修改下面的文件,明确链接OpenGL:

/Volumes/MacOS/Program/qt6.2.0/qtbase/src/plugins/platforms/cocoa/CMakeLists.txt

# Generated from cocoa.pro.

# special case:

#####################################################################

## QCocoaIntegrationPlugin Plugin:

#####################################################################

# 找到 OpenGL

find_package(OpenGL REQUIRED)

qt_internal_add_plugin(QCocoaIntegrationPlugin

    OUTPUT_NAME qcocoa

    DEFAULT_IF ${QT_QPA_DEFAULT_PLATFORM} MATCHES cocoa # special case

    PLUGIN_TYPE platforms

    SOURCES

        main.mm

        qcocoaapplication.h qcocoaapplication.mm

        qcocoaapplicationdelegate.h qcocoaapplicationdelegate.mm

        qcocoabackingstore.h qcocoabackingstore.mm

        qcocoaclipboard.h qcocoaclipboard.mm

        qcocoacolordialoghelper.h qcocoacolordialoghelper.mm

        qcocoacursor.h qcocoacursor.mm

        qcocoadrag.h qcocoadrag.mm

        qcocoaeventdispatcher.h qcocoaeventdispatcher.mm

        qcocoafiledialoghelper.h qcocoafiledialoghelper.mm

        qcocoafontdialoghelper.h qcocoafontdialoghelper.mm

        qcocoahelpers.h qcocoahelpers.mm

        qcocoainputcontext.h qcocoainputcontext.mm

        qcocoaintegration.h qcocoaintegration.mm

        qcocoaintrospection.h qcocoaintrospection.mm

        qcocoamenu.h qcocoamenu.mm

        qcocoamenubar.h qcocoamenubar.mm

        qcocoamenuitem.h qcocoamenuitem.mm

        qcocoamenuloader.h qcocoamenuloader.mm

        qcocoamimetypes.h qcocoamimetypes.mm

        qcocoanativeinterface.h qcocoanativeinterface.mm

        qcocoansmenu.h qcocoansmenu.mm

        qcocoascreen.h qcocoascreen.mm

        qcocoaservices.h qcocoaservices.mm

        qcocoasystemtrayicon.h qcocoasystemtrayicon.mm

        qcocoatheme.h qcocoatheme.mm

        qcocoawindow.h qcocoawindow.mm

        qcocoawindowmanager.h qcocoawindowmanager.mm

        qiosurfacegraphicsbuffer.h qiosurfacegraphicsbuffer.mm

        qmacclipboard.h qmacclipboard.mm

        qmultitouch_mac.mm qmultitouch_mac_p.h

        qnsview.h qnsview.mm

        qnswindow.h qnswindow.mm

        qnswindowdelegate.h qnswindowdelegate.mm

        qcocoacolordialoghelper.h qcocoacolordialoghelper.mm

        qcocoafiledialoghelper.h qcocoafiledialoghelper.mm

        qcocoafontdialoghelper.h qcocoafontdialoghelper.mm

    DEFINES

        QT_NO_FOREACH

    LIBRARIES

        ${FWAppKit}

        ${FWCarbon}

        ${FWCoreServices}

        ${FWCoreVideo}

        ${FWIOKit}

        ${FWIOSurface}

        ${FWMetal}

        ${FWQuartzCore}

        Qt::Core

        Qt::CorePrivate

        Qt::Gui

        Qt::GuiPrivate

        OpenGL::GL  # 添加 OpenGL 库链接

)

# special case begin

qt_disable_apple_app_extension_api_only(QCocoaIntegrationPlugin)

# special case end

# Resources:

set(qcocoaresources_resource_files

    "images/sizeallcursor.png"

    "images/spincursor.png"

    "images/waitcursor.png"

)

qt_internal_add_resource(QCocoaIntegrationPlugin "qcocoaresources"

    PREFIX

        "/qt-project.org/mac/cursors"

    FILES

        ${qcocoaresources_resource_files}

)

#### Keys ignored in scope 1:.:.:cocoa.pro:<TRUE>:

# OTHER_FILES = "cocoa.json"

## Scopes:

#####################################################################

qt_internal_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_opengl

    SOURCES

        qcocoaglcontext.h qcocoaglcontext.mm

    LIBRARIES

        OpenGL::GL # 添加OpenGL

)

qt_internal_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_vulkan

    SOURCES

        qcocoavulkaninstance.h qcocoavulkaninstance.mm

   LIBRARIES

        OpenGL::GL # 添加OpenGL

)

qt_internal_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_accessibility

    SOURCES

        qcocoaaccessibility.h qcocoaaccessibility.mm

        qcocoaaccessibilityelement.h qcocoaaccessibilityelement.mm

    LIBRARIES

        OpenGL::GL # 添加OpenGL

)

qt_internal_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_sessionmanager

    SOURCES

        qcocoasessionmanager.cpp qcocoasessionmanager.h

    LIBRARIES

        OpenGL::GL # 添加OpenGL

)

#### Keys ignored in scope 7:.:.:cocoa.pro:TARGET Qt::Widgets:

# QT_FOR_CONFIG = "widgets"

#### Keys ignored in scope 12:.:.:cocoa.pro:NOT TARGET___equals____ss_QT_DEFAULT_QPA_PLUGIN:

# PLUGIN_EXTENDS = "-"

/Volumes/MacOS/Program/qt=6.2.0/qtbase/src/opengl/CMakeLists.txt

# Generated from opengl.pro.

#####################################################################

## OpenGL Module:

#####################################################################

qt_internal_add_module(OpenGL

SOURCES

qopengl2pexvertexarray.cpp qopengl2pexvertexarray_p.h

qopenglbuffer.cpp qopenglbuffer.h

qopenglcustomshaderstage.cpp qopenglcustomshaderstage_p.h

qopengldebug.cpp qopengldebug.h

qopenglengineshadermanager.cpp qopenglengineshadermanager_p.h

qopenglengineshadersource_p.h

qopenglframebufferobject.cpp qopenglframebufferobject.h qopenglframebufferobject_p.h

qopenglgradientcache.cpp qopenglgradientcache_p.h

qopenglpaintdevice.cpp qopenglpaintdevice.h qopenglpaintdevice_p.h

qopenglpaintengine.cpp qopenglpaintengine_p.h

qopenglpixeltransferoptions.cpp qopenglpixeltransferoptions.h

qopenglshadercache_p.h

qopenglshaderprogram.cpp qopenglshaderprogram.h

qopengltexture.cpp qopengltexture.h qopengltexture_p.h

qopengltextureblitter.cpp qopengltextureblitter.h

qopengltexturecache.cpp qopengltexturecache_p.h

qopengltextureglyphcache.cpp qopengltextureglyphcache_p.h

qopengltexturehelper.cpp qopengltexturehelper_p.h

qopengltextureuploader.cpp qopengltextureuploader_p.h

qopenglversionfunctions.cpp qopenglversionfunctions.h qopenglversionfunctions_p.h

qopenglversionfunctionsfactory.cpp qopenglversionfunctionsfactory.h

qopenglversionprofile.cpp qopenglversionprofile.h

qopenglvertexarrayobject.cpp qopenglvertexarrayobject.h

qopenglwindow.cpp qopenglwindow.h

qplatformbackingstoreopenglsupport.cpp qplatformbackingstoreopenglsupport.h

qtopenglglobal.h

DEFINES

QT_NO_FOREACH

QT_NO_USING_NAMESPACE

LIBRARIES

Qt::CorePrivate

Qt::GuiPrivate

PUBLIC_LIBRARIES

Qt::Core

Qt::Gui

PRIVATE_MODULE_INTERFACE

Qt::CorePrivate

Qt::GuiPrivate

)

## Scopes:

#####################################################################

qt_internal_extend_target(OpenGL CONDITION QT_FEATURE_opengles2

SOURCES

qopenglfunctions_es2.cpp qopenglfunctions_es2.h

)

qt_internal_extend_target(OpenGL CONDITION NOT QT_FEATURE_opengles2

SOURCES

qopenglfunctions_1_0.cpp qopenglfunctions_1_0.h

qopenglfunctions_1_1.cpp qopenglfunctions_1_1.h

qopenglfunctions_1_2.cpp qopenglfunctions_1_2.h

qopenglfunctions_1_3.cpp qopenglfunctions_1_3.h

qopenglfunctions_1_4.cpp qopenglfunctions_1_4.h

qopenglfunctions_1_5.cpp qopenglfunctions_1_5.h

qopenglfunctions_2_0.cpp qopenglfunctions_2_0.h

qopenglfunctions_2_1.cpp qopenglfunctions_2_1.h

qopenglfunctions_3_0.cpp qopenglfunctions_3_0.h

qopenglfunctions_3_1.cpp qopenglfunctions_3_1.h

qopenglfunctions_3_2_compatibility.cpp qopenglfunctions_3_2_compatibility.h

qopenglfunctions_3_2_core.cpp qopenglfunctions_3_2_core.h

qopenglfunctions_3_3_compatibility.cpp qopenglfunctions_3_3_compatibility.h

qopenglfunctions_3_3_core.cpp qopenglfunctions_3_3_core.h

qopenglfunctions_4_0_compatibility.cpp qopenglfunctions_4_0_compatibility.h

qopenglfunctions_4_0_core.cpp qopenglfunctions_4_0_core.h

qopenglfunctions_4_1_compatibility.cpp qopenglfunctions_4_1_compatibility.h

qopenglfunctions_4_1_core.cpp qopenglfunctions_4_1_core.h

qopenglfunctions_4_2_compatibility.cpp qopenglfunctions_4_2_compatibility.h

qopenglfunctions_4_2_core.cpp qopenglfunctions_4_2_core.h

qopenglfunctions_4_3_compatibility.cpp qopenglfunctions_4_3_compatibility.h

qopenglfunctions_4_3_core.cpp qopenglfunctions_4_3_core.h

qopenglfunctions_4_4_compatibility.cpp qopenglfunctions_4_4_compatibility.h

qopenglfunctions_4_4_core.cpp qopenglfunctions_4_4_core.h

qopenglfunctions_4_5_compatibility.cpp qopenglfunctions_4_5_compatibility.h

qopenglfunctions_4_5_core.cpp qopenglfunctions_4_5_core.h

qopenglqueryhelper_p.h

qopengltimerquery.cpp qopengltimerquery.h

LIBRARIES

OpenGL::GL # 添加 OenGL 库

)

qt_internal_extend_target(OpenGL CONDITION QT_FEATURE_vulkan

SOURCES

qvkconvenience.cpp qvkconvenience_p.h

LIBRARIES

OpenGL::GL # 添加 OenGL 库

)

if(QT_FEATURE_vulkan)

qt_internal_add_target_include_dirs_and_optionally_propagate(

OpenGL WrapVulkanHeaders::WrapVulkanHeaders)

endif()

qt_internal_extend_target(OpenGL CONDITION QT_FEATURE_egl

SOURCES

qopenglcompositor.cpp qopenglcompositor_p.h

qopenglcompositorbackingstore.cpp qopenglcompositorbackingstore_p.h

LIBRARIES

OpenGL::GL # 添加 OenGL 库

)

qt_internal_create_tracepoints(OpenGL qtopengl.tracepoints)

qt_internal_add_docs(OpenGL

doc/qtopengl.qdocconf

)

终端窗口进入/Volumes/MacOS/Program/qt6.2.0/,执行:

cmake —build . —parallel

发现报错:

In file included from ../../../3rdparty/chromium/content/public/browser/browser_accessibility_state.h:12:

../../../3rdparty/chromium/content/public/browser/browser_context.h:21:10: fatal error: 'components/spellcheck/spellcheck_buildflags.h' file not found

#include "components/spellcheck/spellcheck_buildflags.h"

文件缺失:qt-6.2.0/qtwebengine/src/3rdparty/chromium/components/spellcheck/spellcheck_buildflags.h

手工创建该文件,写入内容

#define ENABLE_SPELLCHCEK 0

#define BUILDFLAG_INTERNAL_ENABLE_SPELLCHECK 0

修改文件browser_context.h第352行如下

//#if defined(TOOLKIT_QT) && BUILDFLAG(ENABLE_SPELLCHECK)

#if defined(TOOLKIT_QT)

// Inform about not working dictionary for given language

virtual void FailedToLoadDictionary(const std::string& language) = 0;

#endif

最后执行

cmake —build . —parallel

cmake --install .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

细说STM32F407通用定时器的基础知识

目录 一、通用定时器功能概述 二、细说2通道定时器的功能 1.时钟信号和触发控制器 2.时基单元工作原理 (1)计数寄存器(CNT) (2)预分频寄存器(PSC) (3)自动重载寄存器(ARR) (4)时基单元的控制位 3.捕获/比较通道 三、生成PWM波 1.生成PWM波的原理 2.与生成PWM波相关的HA…

B2C营销策略:Wishpond加持的全面指南

在当今竞争激烈的市场中&#xff0c;制定有效的B2C&#xff08;企业对消费者&#xff09;营销策略比以往任何时候都更为重要。B2C公司直接向消费者销售产品和服务&#xff0c;因此他们的营销策略必须在个人层面产生共鸣&#xff0c;以鼓励直接和即时的行动。此外&#xff0c;将…

【C++】关键字、命名空间、输入和输出、缺省参数的深入了解

目录 一、C关键字二、命名空间2.1 为什么存在命名空间&#xff1f;2.2 命名空间定义2.3 命名空间使用 三、C输入&输出四、缺省函数4.1 缺省函数分类 总结 一、C关键字 C一共有63个关键字 其中红色圈出来的32个关键字同时也是C语言的 二、命名空间 2.1 为什么存在命名空间…

超简单访问群晖NAS的方法,安装一个SPK套件即可

目录 准备工作 下载与安装神卓NAS公网助手 使用神卓NAS公网助手实现远程访问 我们都知道群晖&#xff2e;&#xff21;&#xff33;放在家里&#xff0c;人在外面的话是无法访问的&#xff0c;因为有家庭NAT的限制&#xff0c;但是使用的NAS的场景比较多&#xff0c;在外面又…

PyTorch----模型运维与实战

一、PyTorch是什么 PyTorch 由Facebook开源的神经网络框架&#xff0c;专门针对 GPU 加速的深度神经网络&#xff08;DNN&#xff09;编程。 二、PyTorch安装 首先确保你已经安装了GPU环境&#xff0c;即Anaconda、CUDA和CUDNN 随后进入Pytorch官网​​​​​​PyTorch 官…

【C++】深度解析C++的四种强制转换类型(小白一看就懂!!)

目录 一、前言 二、C风格的强制类型转换 &#x1f95d;隐式类型转换 &#x1f349;显示类型转换 三、为什么C需要四种类型转换 四、C强制类型转换 &#x1f353; 静态转换&#xff08;static_cast&#xff09; ✨用法 ✔️语法 &#x1f331;例子 &#x1f34…

oracle数据库安装和配置:详细教程

安装和配置Oracle数据库是一个较为复杂的过程&#xff0c;需要按照一定的步骤来操作。以下是基于Oracle Database 19c的安装和配置教程&#xff0c;适用于Windows环境。请根据你的具体环境和版本进行适当的调整。 1. 下载Oracle数据库软件 访问Oracle官方网站下载Oracle Data…

2.C++入门2(函数重载与引用)

⭐本章主要介绍c中的函数重载&#xff0c;重载的原理&#xff0c;和引用&#xff08;参数引用&#xff0c;返回值引用&#xff09; ⭐本人c代码的Gitee仓库&#xff1a;c学习 橘子真甜/yzc的c学习 - 码云 - 开源中国 (gitee.com) 一.函数重载 1.1 什么是函数重载 函数重载是函…

使用OpenCore Auxiliary Tools(OCAT)为黑苹果生成三码

文章目录 基础知识apple三码常用工具OCAT 操作方法配置正确的open core版本一键生成 验证 基础知识 apple三码 苹果的生态是一套完整的闭环&#xff0c;每一个苹果硬件产品都有独一无二的 SMBIOS ID&#xff08;机型 ID&#xff09;&#xff0c;机型 ID 决定序列号、主板序列号…

遥感技术在生态系统碳储量、碳收支、碳排放、碳循环以及人为源排放反演等领域的技术发展,实践角度解决遥感技术在生态、能源、大气等领域的碳排放监测及模拟问题

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本教程的目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系…

I 农产品如何实现全链路追踪?区块链、非中心化数据库的应用

大家好啊&#xff0c;我是豆小匠。 本期作为区块链技术分享的第一期&#xff0c;和大家分享下区块链在现实生活中的应用。 区块链的场景 说起区块链&#xff0c;大家可能比较陌生&#xff0c;但是说比特币估计都有耳闻。 但是作为一项技术&#xff0c;区块链的应用远不止于此…

mysql Field ‘ssl_cipher‘ doesn‘t have a default value的解决

1、执行sql的时候报错&#xff1a; 16:48:00 INSERT INTO mysql.user (Host,User,authentication_string) VALUES(%,root, PASSWORD(12323)) Error Code: 1364. Field ssl_cipher doesnt have a default value 0.000 sec 1、解决&#xff0c;执行命令&#xff1a; my…

Linux 操作系统 进程(2)

上篇文章我们说过的操作系统进程的概念等&#xff08;Linux 操作系统 进程&#xff08;1&#xff09;-CSDN博客&#xff09;&#xff0c;这篇我们就来了解进程最重要最直观的两个状态 &#xff1a; 进程状态 进程优先级 进程状态 kill命令 我们在查询进程的时候就可以看到当前…

港股通“大洗牌”,这是一场“双赢”还是一次“交易”?

最近的资本市场&#xff0c;可谓是“一石激起千层浪”。先有阿里完成香港双重主要上市&#xff0c;随后港股通进行“大洗牌”。 9月9日&#xff0c;上交所、深交所发布公告&#xff0c;阿里巴巴-W&#xff08;09988.HK&#xff09;、茶百道(02555.HK)、云音乐(09899.HK)、顺丰…

YB5090是一款 5V USB 输入,支持双节串联锂电池或锂离子电池的升压充电管理 IC

适用于TYPE-C接口,集成30V OVP功能 , 最大1.8A充电电流,带NTC及使能功能,双节锂电升压充电芯片 概述&#xff1a; 是一款 5V USB 输入&#xff0c;支持双节串联锂电池或锂离子电池的升压充电管理 IC。集成有 NTC 功能&#xff0c;其最大的充电电流可达 1.8A。 集成功率MOS,采用…

架构师备考的一些思考(二)

前言 以我的视野来看&#xff0c;部长或技术总监这种岗位还是比较难竞争的&#xff0c;换言之&#xff0c;程序员的上升空间比较窄&#xff0c;如果想要拿到高级岗位&#xff0c;最好的是工作三五年后就转项目经理&#xff0c;然后再往上爬。 架构师倒是也能晋升高级岗位&#…

git的快速合并fast-forward merge详解

文章目录 1. 什么是快进合并&#xff1f;2. 快进合并的前提条件3. 快进合并的工作原理3.1 示例场景&#xff1a;3.2 使用命令&#xff1a;3.3 快进合并的视觉效果&#xff1a; 4. 快进合并的优点5. 快进合并的缺点6. 快进合并 vs 非快进合并6.1 非快进合并&#xff1a;6.2 非快…

Promise详解、自定义

这里写目录标题 一、.Promise对象详解1. Promise是什么2. Promise的优点3. 异步编程4. then(onFulfilled, onRejected)&#xff1a;5. util.promisify 方法&#xff1a;6. promise的状态改变7.Promise 对象的值8. Promise的基本执行流程9. Promise的API10. Promise中的关键问题…

怎样训练一个自己的大语言模型?这可能是全网最简单易懂的教程!

Llama 2 是来自 Meta 的第二代开源LLM的集合&#xff0c;旨在处理各种自然语言处理任务&#xff0c;模型的规模从 7B&#xff08;70亿&#xff09;到 70B&#xff08;700亿&#xff09;个参数不等&#xff0c;可以商用。 Llama-2-Chat 针对对话进行了优化&#xff0c;显示出与…

你们准备好了吗?Python 入行 AI 的基础技术栈及学习路线

人工智能&#xff08;AI&#xff09;是当今技术发展的重要领域之一&#xff0c;而 Python 已成为 AI 领域的首选编程语言之一。Python 简单易学&#xff0c;具有丰富的生态系统和社区支持&#xff0c;特别是在 AI 和机器学习&#xff08;ML&#xff09;领域有大量强大的库和框架…