接触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权限的步骤:
-
右键编译生成的App文件 — 显示包含内容 — Contents — Info.plist;
-
用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
下新增了Frameworks
和PlugIns
2个目录
补全第三方库
此时,点击运行通常会报如下错误:
借助otool
工具查看应用程序的依赖项,这里主要关注第三方库,@rpath
可理解为Frameworks
所在路径。
拷贝第三方库到Frameworks
下,双击app文件可正常运行了。
打包dmg安装文件
macdeployqt GameLiveDemo.app -dmg
使用上面的指令打包,会报一些错误,但不影响程序运行。网上普通使用install_name_tool
工具指定第三库的目录,试了几次没生效,想要了解的朋友可以参考: