远程 Linux 部署配置

在项目配置文件和Projects >Run Settings >Deployment 中指定将应用程序部署到通用远程 Linux 设备的设置。

部署到远程 Linux 设备

要安装的文件列在Deployment 步骤的Files to deploy 字段中。Source File Path 字段显示文件在开发 PC 上的位置。Target Directory 字段显示文件在设备上的安装目录。红色文本表示缺少信息。

如果构建系统未自动检测源目录和目标目录,请选择Override deployment data from build system ,然后选择Add 手动输入。要从Files to deploy 中删除所选路径,请选择Remove

添加缺失文件

添加文件以进行部署的过程取决于您使用的构建系统。有关详细信息,请参阅指定项目内容

CMake 构建

使用 CMake 作为构建系统时,在 CMakeLists.txt 文件中使用install命令添加缺失的文件。

例如,在 CMakeLists.txt 文件中添加以下几行,将项目的二进制文件安装到远程设备上的/opt 目录:

set(INSTALL_DESTDIR "/opt")

install(TARGETS <target>
    RUNTIME DESTINATION "${INSTALL_DESTDIR}"
    BUNDLE DESTINATION "${INSTALL_DESTDIR}"
    LIBRARY DESTINATION "${INSTALL_DESTDIR}"
)

qmake 生成

使用 qmake 时,请编辑项目.pro 文件中的INSTALLS 变量

运行应用程序时,Qt Creator 会将必要的文件复制到设备上,并在设备上启动应用程序。

例如,在.pro 文件中添加以下几行,将项目的二进制文件复制到远程设备上的/opt 目录:

target.path = /opt
INSTALLS += target

要部署其他文件,可将它们添加到其他目标中,这些目标也可添加到INSTALLS 中。

部署步骤

在设备上运行应用程序时,Qt Creator 首先会按照部署步骤的指定上传必要的文件。

上传文件

默认情况下,Qt Creator 会按照Upload files via SFTP 步骤的指定,使用 SSH 文件传输协议 (SFTP) 将应用程序文件复制到设备。

注意: 如果 SFTP 上传失败,请确保远程设备的 SSH 守护进程已启用 SFTP。某些不支持 SFTP 的 Dropbear 版本会在尝试上传 SFTP 时崩溃。这不是Qt Creator 的错误。

如果您有大量数据要复制,请在Upload Files via SFTP 步骤中选择Details ,然后选择Incremental deployment 复选框。Qt Creator 会记录部署时间,并只复制自上次部署以来发生变化的文件。但是,当您对设备进行重大更改时,例如手动从设备中删除文件或闪存新磁盘镜像,或者当您使用具有相同 IP 地址的其他设备时,请清除一次复选框,以便Qt Creator 重新部署所有文件。

创建压缩包

要只创建压缩包而不将文件复制到设备,请选择Add Deploy Step >Create tarball 。然后删除所有其他部署步骤。

Deploy tarball via SFTP upload 步骤指定Qt Creator 将压缩包上传到设备并提取它。

另请参阅 如何:构建和运行》、《如何:为远程 Linux 开发》和《远程 Linux 运行设置》

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.