MacOS下 Qt6编译及链接MySQL


一、 本文使用系统环境

系统架构:arm64架构 + intel 架构
Qt版本:6.2.2 (安装时务必勾选源码)
MySQL版本: 8.0.29

二、下载MySQL

可选方式 :

  1. 官网下载对应dmg,根据不同架构选择不同的版本
    在这里插入图片描述
    安装pkg即可,在最后需设置环境变量
export PATH=${PATH}:/usr/local/mysql/bin
  1. homebrew 安装 ,homebrew配置教程见该文章
    终端执行如下代码
brew install mysql

等待安装完成后验证mysql版本

mysql --version

在这里插入图片描述
使用where命令查询mysql的位置

where mysql

使用which命令查询当前使用的mysql可执行程序位置

which mysql

homebrew需使用的库的位置如下
/opt/homebrew/Cellar/mysql/8.0.29/lib/libmysqlclient.dylib

三、安装cmake

通过homebrew安装
使用如下命令

homebrew install cmake

四、编译mysql

  1. 开启新的终端以始上述环境变量生效

  2. 终端创建编译目录

mkdir build-sqldrivers
cd build-sqldrivers
mkdir build
cd build
  1. 继续执行cmake识别命令 注意,请根据以下指令填入你的qt源码路径、qt识别路径、mysql include 目录 mysql lib目录,
 cmake -G "Unix Makefiles" \
 /Users/xxx/Qt6.2.2/6.2.2/Src/qtbase/src/plugins/sqldrivers \
 -DCMAKE_PREFIX_PATH=/Users/xxx/Qt/Qt6.2.2/6.2.2/macos \
 -DCMAKE_INSTALL_PREFIX=../ \
 -DMySQL_INCLUDE_DIR="/usr/local/mysql/include" \
 -DMySQL_LIBRARY="/usr/local/mysql/lib/libmysqlclient.dylib"

正常识别成功如图所示
在这里插入图片描述
3. 执行如下命令以进行编译

若为m1 还需修改编译的架构,此问题的产生原因是是qt源码错误导致
/xxxxx/build-sqldrivers/build/mysql/CMakeFiles/QMYSQLDriverPlugin.dir/link.txt
将x86_64改为 arm64 后重新编译
在这里插入图片描述

cmake --build .

此时两个架构均能编译成功
在这里插入图片描述

  1. 执行安装命令
 cmake --install .

此时目录结构如图所示
在这里插入图片描述
5. 拷贝lib/cmake/Qt6Sql中的关于MySQL的cmkae识别文件至/Users/xxxx/Qt6.2.2/6.2.2/macos/lib/cmake/Qt6Sql
在这里插入图片描述
6.拷贝plugins/sqldrivers/libqsqlmysql.dylib动态库文件至/Users/xxxx/Qt6.2.2/6.2.2/macos/plugins/sqldrivers
在这里插入图片描述

五、测试mysql

新建一个cmake工程
cmkaelist如下代码所示
注意加入Sql在如下代码中

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Sql REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql 
target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)

完整cmakelist.txt

cmake_minimum_required(VERSION 3.5)

project(untitled VERSION 0.1 LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets Sql REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql REQUIRED)

set(PROJECT_SOURCES
        main.cpp
        widget.cpp
        widget.h
        widget.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(untitled
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET untitled APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(untitled SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(untitled
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql)

set_target_properties(untitled PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(untitled)
endif()

在main函数替换如下代码进行测试

#include <QApplication>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug()<<"available drivers:";
        QStringList drivers = QSqlDatabase::drivers();
        foreach(QString driver, drivers)
            qDebug()<<driver;

    return a.exec();
}

运行结果如图所示,已支持QMYSQL
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MStudyStudio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值