qt移植windows程序并在mac下打包

接触qt有一段时间了,要学习的东西很多,记录下在工作中解决的实际问题。

windows下的Qt代码移植到Mac

为了方便代码管理,同一套代码需要同时在mac和windows系统下执行。对于Qt框架部分的代码,以及不依赖第三方库的C++代码,都是不需要修改的。主要步骤如下:

在Mac上安装Qt环境

直接下载dmg安装包,或者下载zip压缩包修改一下环境变量。新建一个工程,工程配置选择Clang编译,运行正常即可。网上相关资料较多,不再细说。

改一下工程配置

  • 删除与.pro文件同级目录中的.user文件;
  • 重新选择编译套件(Kits),选择带clang关键字的即可;

修改Pro文件的第三方导入

winodws和mac的库文件是不一样的,windows动态库是lib和dll文件,mac下面是dylib。为了兼容双平台,需要将第三方库用win32{}macx{}包裹起来,在mac上视情况添加:QMAKE_CXXFLAGS += -x objective-c++

win32{
# 导入windows第三方库
}

macx{
QMAKE_CXXFLAGS += -x objective-c++
# 导入mac第三方库
}

处理与平台相关的函数

简单点来说,就是用WIN32宏把平台特有的函数区分开来,条件编译,如Slepp是windows下特有的。

#ifdef WIN32
Sleep(500);
#else
usleep(500*1000);
#endif

编译运行

执行完上面的步骤,可以尝试编译运行了,如果第三方库在windows和mac提供的接口不一致,还需要用WIN32宏作下区分。如果不是特别复杂的项目,基本能正常运行了。

配置Mac的权限

为啥能运行了,还要配置Mac权限呢?如果你要调试代码,且需要访问摄像头、麦克风等设备,运行会报一些访问受限的错误提示。修改app权限的步骤:

  1. 右键编译生成的App文件 — 显示包含内容 — Contents — Info.plist;
    请添加图片描述

  2. 用xcode打开Info.plist,如配置权限:摄像头和麦克风;
    请添加图片描述

打包Mac下可执行的dmg安装包

关于打包这一块,参考了网上很多资料,均会遇到各种各样的问题。不过核心思路差不多,下面分享下我打包的过程。

配置macdeployqt环境

首先要找到macdeployqt工具所在的目录,一般在是在Qt安装目录下的clang_64/bin下,使用option+command+C复制文件路径。
请添加图片描述

执行如下指令:

sudo vi /etc/paths

# 在paths文件后面添加bin路径
export PATH=$PATH:/Users/zego/Qt5.12.12/5.12.12/clang_64/bin

打包依赖项

将运行生成的app文件拷贝到一个新的路径,执行如下指令:

# macdeployqt 应用名称
macdeployqt GameLiveDemo.app 

执行完后,可以看到Contents下新增了FrameworksPlugIns2个目录
请添加图片描述

补全第三方库

此时,点击运行通常会报如下错误:
请添加图片描述

借助otool工具查看应用程序的依赖项,这里主要关注第三方库,@rpath可理解为Frameworks所在路径。
请添加图片描述

拷贝第三方库到Frameworks下,双击app文件可正常运行了。

打包dmg安装文件

macdeployqt GameLiveDemo.app -dmg

使用上面的指令打包,会报一些错误,但不影响程序运行。网上普通使用install_name_tool工具指定第三库的目录,试了几次没生效,想要了解的朋友可以参考:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值