【问题标题】:Automatically include Qt libraries in the .app bundle deploying on Mac在 Mac 上部署的 .app 包中自动包含 Qt 库
【发布时间】:2021-06-30 03:56:26
【问题描述】:

我正在使用 Qt Creator 来部署我的 Qt 应用程序。在 Mac 上,我想在 .app 包中包含所需的 Qt 库。有没有办法使用 Qt Creator 自动完成?我应该使用命令行吗?那样的话,我该怎么做呢?

【问题讨论】:

  • 你不能使用“macdeployqt fooapplication.app”吗?不过它还不能处理 QML。
  • 我实际上不建议将 macdeployqt 或任何其他设置创建过程放入构建过程中,因为每次调试/重新编译程序时都会执行此过程。您很快就会再次禁用它(就像我一样)。拥有一个单独的 shell 脚本来创建您的设置文件会更容易。
  • 当然你可以添加一个install或类似的目标,然后简单地调用make install。如果它不是最新的,这可以自动构建您的应用程序。

标签: macos qt qt-creator qt5


【解决方案1】:

macdeployqt 命令行工具将添加您的 Qt 项目引用的所有必要 Qt 库。

如果您需要任何其他第三方库,则需要手动复制这些库并使用 install_name_tool 命令设置它们的路径。

您可以使用 otool 命令检查您的应用程序引用了哪些库。例如:-

otool -L MyApplication.app/Contents/MacOS/MyApplication

对于 Qt Creator,我倾向于编写一个脚本来添加必要的库并调用 macdeployqt,然后在 Projects 下添加一个调用该脚本的构建步骤。

仅添加 Qt 库的示例脚本如下所示:-

#!/bin/bash
pwd
echo Copying QT libraries...
macdeployqt ./MyApplication.app

【讨论】:

    【解决方案2】:

    您可以简单地运行macdeployqt foo.app。 Qt Creator 也不支持这个特性。但是,您可以在 QtCreator 项目设置中将自定义命令注入到您的进程中。

    虽然它还不支持 QML。在 codereview 下有补丁即将到来。详情见以下链接:

    https://codereview.qt-project.org/#q,status:open+project:qt/qttools,n,z

    注意:macdeployqt 不应该用于通常的开发和调试!它应该只在部署时使用。否则,每次构建时都会执行它,即使您由于测试的微小更改而只是重新编译代码。这可能会减慢该过程,但至于部署,应该没问题。

    【讨论】:

      【解决方案3】:

      在 QT6 上,我完全可以在 QT Creator 中完成:

      在 Projects/Build 中,在“make”之后添加自定义构建步骤(可能只想为您的“发布”配置执行此操作):

      命令:%{Qt:QT_HOST_PREFIX}/bin/macdeployqt

      参数:%{ActiveProject:BuildConfig:Path}/%{ActiveProject:Name}.app - qmldir=%{ActiveProject:NativePath}

      工作目录:%{buildDir}

      我能够通过将生成的 .app 空投到我的测试机器上来对其进行测试。

      参考:https://doc.qt.io/qt-6/macos-deployment.html#macdeploy

      【讨论】:

        猜你喜欢
        • 2014-11-19
        • 1970-01-01
        • 2017-06-01
        • 2016-08-24
        • 2015-06-07
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多