在此记录一下Qt在mac下生成app后,如何为app配置相关的依赖项,使得生成的app直接拿到别人的电脑上可以直接运行。
总的来说需要三步
第一:使用macdeployqt工具将需要的Qt依赖拷贝到app中,关于macdeployqt工具将不再多说,跟Windows的windeployqt一样,在安装QtCreator时自动添加到安装bin目录中
第二:将我们自己引入的库文件、资源文件、配置文件等添加到app中(如果这几项没有使用,略过即可)
第三:使用install_name_tool -change命令将app的引用库路径指定到我们的app包内
下面以test.app为例进行各步骤命令的讲解:
- 在test.app所在文件夹打开终端,输入命令 “macdeployqt安装全路径 test.app路径”,例如我的macdeployqt在路径/Users/Qt5.12.3/5.12.3/clang_64/bin/macdeployqt,在test.app同路径下打开的终端,则输入的命令为"/Users/Qt5.12.3/5.12.3/clang_64/bin/macdeployqt test.app",使用者可以根据自己安装的路径和开启终端与app的相对路径进行命令中路径引用的调整,此时可以看到会在Contens中新增了Frameworks和Plugin文件夹,里面存放的是对应的qt环境依赖
- 将app需要的我们自己添加的依赖,比如动态库,资源文件等拷贝到app包内,通常依赖的动态库或静态库放到Frameworks文件夹中,资源文件放到Resouse文件夹中,其他的一些配置文件等可以根据代码中的相对路径需要,创建新的文件夹拷贝进去即可
- 进入到test.app/Contens/MacOS文件夹,对其中的test目标文件进行依赖路径的重新设置,其中包括:自己添加的库依赖路径、依赖库的依赖路径,Qt库依赖路径的重新设置等,如果没有依赖其他自己添加的库,前两个设置省略。在此还需要说一下一个命令"otool -L test"在test.app/Contens/MacOS文件夹中打开终端,执行该命令,可以查看test需要的依赖库有哪些,本次的test查询结果界面如下:
我们需要关注的就是@rpath开头的几个,这是应用程序对本地QtCreator安装路径下的库依赖,现在需要指定到我们的test.app//Contens/Frameworks/文件夹下拷贝的Qt环境依赖了,命令如下:
install_name_tool -change @rpath/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets test
install_name_tool -change @rpath/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui test
install_name_tool -change @rpath/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore test
如果test引用了libtestA.1.dylib,则还需要添加对自己引用库的依赖路径变更
install_name_tool -change libtestA.1.dylib @executable_path/../Frameworks/libtestA.1.dylib test
至此搞定。