我正在用C++开发Qt项目。但是,在Mac上,无法运行它,因为它找不到任何库。

我按照Qt网站的说明进行操作,一个Qt文件出现在主目录中。

drwxr-xr-x  14 Toan  staff     448  2 mar 20:25 .
drwxr-xr-x+ 52 Toan  staff    1664  2 mar 20:21 ..
-rw-r--r--@  1 Toan  staff    8196  2 mar 21:23 .DS_Store
-rw-r--r--   1 Toan  staff  195548 16 fév 23:22 InstallationLog.txt
drwxr-xr-x   5 Toan  staff     160 16 fév 23:13 Licenses
drwxrwxrwx   3 Toan  staff      96 16 fév 23:13 MaintenanceTool.app
-rw-r--r--   1 Toan  staff  276471 16 fév 23:13 MaintenanceTool.dat
-rw-r--r--   1 Toan  staff    6274 16 fév 23:13 MaintenanceTool.ini
drwxr-xr-x   3 Toan  staff      96 16 fév 23:13 Qt Creator.app
-rw-r--r--   1 Toan  staff    2794 16 fév 23:13 components.xml
drwxr-xr-x   3 Toan  staff      96 16 fév 23:13 dist
drwxrwxrwx   7 Toan  staff     224  2 mar 21:23 installerResources
-rw-r--r--   1 Toan  staff     362 16 fév 23:13 network.xml
-rw-r--r--   1 Toan  staff  151525  5 fév 11:55 update.rcc

最佳答案

在构建项目时,将创建一个所谓的“应用程序 bundle 包”。这是带有.app扩展名的目录。这就是macOS应用程序的实际含义。具有“.app”扩展名的目录。默认情况下,macOS finder不显示“.app”扩展名。例如,Safari应用程序仅显示为“Safari”,而不显示为“Safari.app”。

如果您的项目名为“MyApp”,则应用程序 bundle 包的名称将为“MyApp.app”。要使其在其他计算机上可用,您需要使用“macdeployqt”工具。这会将所有需要的Qt库复制到应用程序 bundle 包中。您从终端使用macdeployqt。

打开一个终端,并在您的项目的build目录中cd。您将在此处找到应用程序的应用程序 bundle 包(在此示例中为MyApp.app。)按如下所示运行macdeployqt:

~/Qt/5.14.1/clang/bin/macdeployqt MyApp.app

切记使用与您用来构建项目的Qt版本一起提供的macdeployqt工具。在这种情况下5.14.1。假定您将Qt安装在默认位置,即主目录中的“Qt”文件夹。

该应用程序现在应该可以在任何macOS系统上运行了。为了更轻松地分发它,您可以使用“ditto”实用程序对其进行压缩。该工具是macOS的一部分:
ditto -v -c -k --sequesterRsrc --keepParent --zlibCompressionLevel 9 MyApp.app MyApp.zip

这将创建MyApp.zip,然后可以分发它。

但是,每次手动执行此操作都会很烦人。我要做的是在我的项目文件中创建一个自定义make目标。假设您正在为项目使用qmake。将此添加到您的.pro文件:
macx {
    macdist.target = macdist
    macdist.commands = \
        rm -rf "$${TARGET}.app" \
        && rm -f "$${TARGET}.zip" \
        && "$$QMAKE_QMAKE" -config release "$$_PRO_FILE_" \
        && make clean \
        && make -j$$QMAKE_HOST.cpu_count \
        && "$$dirname(QMAKE_QMAKE)/macdeployqt" "$${TARGET}.app" \
        && ditto -v -c -k --sequesterRsrc --keepParent --zlibCompressionLevel 9 "$${TARGET}.app" "$${TARGET}.zip"

    QMAKE_EXTRA_TARGETS += macdist
}

现在,您只需照常运行qmake(在Creator中,在菜单中选择“Build-> Run qmake”),然后在终端中进入build目录并执行以下操作:
make macdist

这将执行一个新的发行版本,在其上运行macdeployqt并将其打包为zip。

关于c++ - macOS上缺少Qt库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60496170/

10-11 22:38
查看更多