serialplot mac系统编译移植打包发布

环境

  • macOS Big Sur 11.5.1 处理器:Intel
  • Qt5.15.2
  • Git

clone

qwt

下载qwt6.2.0 zip包 https://sourceforge.net/projects/qwt/files/

将文件重命名为qwt后放到 ~/ws

serialplot

克隆serialplot

cd ~/ws
git clone https://github.com/hyOzd/serialplot.git

编译

qwt

打开qwt的qwt.pro文件,切换至Release,编译

serialplot

打开serialplot.pro文件

#添加qwt库
LIBS += -F$$PWD/../build-qwt-Desktop_Qt_5_15_2_clang_64bit-Release/lib -framework qwt

#添加qwt库目录
INCLUDEPATH += $$PWD/../qwt/src

在QtCreator 项目 -> Build -> Build Environment 添加DYLD_FRAMEWORK_PATH /Users/qj/ws/build-serialplot-Desktop_Qt_5_15_2_clang_64bit-Release

serialplot mac系统编译移植打包发布_第1张图片

然后编译->运行

serialplot mac系统编译移植打包发布_第2张图片

打包

在build目录中执行
macdeployqt ./serialplot.app

// 注意:如果提示找不到此命令的解决办法:
// 在你的qt安装目录找到这个命令的位置,把其路径添加到“bash环境”里面即可。
command not found: macdeployqt      //提示找不到此命令
cd ~     //切换到用户家目录
vim .bash_profile      //用vim编辑配置文件bash_profile 注:按键盘的“i”进入vim插入模式
//在bash_profile中新增以下这一行的内容,下面这一行的意思是在此目录查找macdeployqt这个命令
export PATH=${PATH}:/Users/robert/Qt5.12.5/5.12.5/clang_64/bin  
:wq     //退出并保存
source .bash_profile  //执行这个命令使刚才的配置立即生效
// 执行完macdeployqt命令后出现错误
ERROR: no file at "/Library/Frameworks/qwt.framework/Versions/6/qwt.framework/Versions/6/qwt"
// qwt为第三方库,macdeployqt无法直接将其打包到serialplot.app中,需要手动复制
cp -r ~/ws/build-qwt-Desktop_Qt_5_15_2_clang_64bit-Release/lib/qwt.framework ./serialplot.app/Contents/Frameworks/qwt.framework

右键serialplot.app包选择查看包内容,即可打开一个目录,展开目录可以看到macdeployqt给这个bundle增加了有关qt的依赖库文件。如下图所示:

serialplot mac系统编译移植打包发布_第3张图片

// 这时我们双击serialplot.app运行,出现错误
Dyld Error Message:
  dyld: Using shared cache: B936FA17-1090-3677-8A1A-0FB7DE3CEC6C
Library not loaded: qwt.framework/Versions/6/qwt
// 从log发现是qwt loaded失败

// 使用otool查看serialplot.app使用的动态库,如下图所示:
otool -L serialplot.app/Contents/MacOS/serialplot

// 发现qwt的路径与其他qt库有差异,使用install_name_tool命令修改qwt库路径
install_name_tool -change "qwt.framework/Versions/6/qwt" "@rpath/qwt.framework/Versions/6/qwt" serialplot.app/Contents/MacOS/serialplot
// 然后再使用otool查看app使用的库路径
otool -L serialplot.app/Contents/MacOS/serialplot

// 查看qwt使用的库
otool -L serialplot.app/Contents/Frameworks/qwt.framework/Versions/6/qwt
// 对比serialplot.app/Contents/Frameworks中qt库与qwt所使用的库,将没有的库手动cp到Framework中即可
cp -r ~/Qt/5.15.2/clang_64/lib/QtOpenGL.framework ./serialplot.app/Contents/Frameworks/QtOpenGL.framework
 cp -r ~/Qt/5.15.2/clang_64/lib/QtConcurrent.framework ./serialplot.app/Contents/Frameworks/QtConcurrent.framework

好了,最艰难地时刻过去了,现在双击serialplot.app即可正常运行!

发布

制作dmg

// 在serialplot build目录中执行
macdeployqt ./serialplot.app -dmg
// 忽略告警,应为我们之前执行过macdeployqt,会提示文件已经存在,这一步仅用来生成dmg的

大功告成!

你可能感兴趣的:(QT,macos,github,qt,serialplt,编译)