如何使用snapcraft打包Qt5应用程序

时间:2018-03-31 12:49:48

标签: qt qml qmake snapcraft

我正在尝试创建MDN的快照包,应用程序已打包好,当我尝试运行它时出现/snap/swipe-app/x2/bin/qt5-launch: 74: exec: application: not found错误。

这是我的snapcraft.yaml文件

name: swipe-app # you probably want to 'snapcraft register <name>'
version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
summary: Single-line elevator pitch for your amazing snap # 79 char long summary
description: description
grade: devel # must be 'stable' to release into candidate/stable channels
confinement: strict # use 'strict' once you have the right plugs and slots

apps:
  swipe-app:
    command: qt5-launch application
    plugs:
      - unity7
      - home

parts:
  application:
     # See 'snapcraft plugins'
    plugin: qmake
    project-files: ["snap.pro"]
    source: .
    build-packages:
      - qtbase5-dev
    stage-packages:
      # Here for the plugins-- they're not linked in automatically.
      - libqt5gui5
           after: [qt5conf] # A wiki part

1 个答案:

答案 0 :(得分:0)

正如您已告诉启动脚本您的程序被调用application,然后它会在您运行快照时尝试从当前工作目录执行application。这里有两点需要注意:

工作目录将从终端外部保留快照上下文中保留。例如,如果您在主目录/home/your-user中,那么swipe-app的工作目录也将是/home/your-user

由于上面的工作目录是您的主目录,因此没有任何锚点的命令(例如application)将尝试在您的主目录中执行。因此,在您的示例中,启动脚本将尝试运行等效于/home/your-user/application的命令。

您可以通过确保启动脚本执行cd来更改工作目录来解决此问题,例如: cd $SNAP;或通过添加achor锚定您的命令,例如command: qt5-launch $SNAP/application

您可能需要检查的另一件事是您的qmake版本实际上输出了一个名为application的二进制文件。如果您尚未在TARGET=项目文件中设置snap.pro,则二进制文件将默认为snap application。该行应显示TARGET=application以生成名为application的二进制文件:(参考:https://doc.qt.io/qt-5/qmake-variable-reference.html#target)。