CPack AppImage 生成器

版本 4.2 中添加。

CPack AppImage 生成器允许将应用程序打包成 AppImage 格式。它使用 appimagetool 来打包应用程序,并使用 patchelf 将应用程序的 RPATH 设置为基于 AppImage 挂载位置的相对路径。

appimagetool 不会扫描库依赖项,它只打包已安装的内容,并检查提供的 .desktop 文件是否已正确创建。为了获得最佳兼容性,建议选择一个旧的 LTS 发行版并在其中构建,同时在生成的 AppImage 文件中包含大多数依赖项。

下面的代码片段可以添加到您的 CMakeLists.txt 文件中,将 my_application_target 替换为您应用程序的目标。它将尽最大努力扫描并复制您的应用程序链接到的库,并将它们复制到安装位置。

install(CODE [[
    file(GET_RUNTIME_DEPENDENCIES
        EXECUTABLES $<TARGET_FILE:my_application_target>
        RESOLVED_DEPENDENCIES_VAR resolved_deps
    )

    foreach(dep ${resolved_deps})
        # copy the symlink
        file(COPY ${dep} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

        # Resolve the real path of the dependency (follows symlinks)
        file(REAL_PATH ${dep} resolved_dep_path)

        # Copy the resolved file to the destination
        file(COPY ${resolved_dep_path} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
    endforeach()
]])

对于基于 Qt 的项目,建议调用 qt_generate_deploy_app_script()qt_generate_deploy_qml_app_script() 并安装由脚本生成的文件,这将安装 Qt 模块的插件。

您还必须将 CPACK_PACKAGE_ICON 设置为与 Desktop 文件中列出的值相同。

CPack AppImage 生成器特有的变量

CPACK_APPIMAGE_TOOL_EXECUTABLE

appimagetool 可执行文件的名称,可能位于构建目录中、具有完整路径或在 PATH 中可访问。

默认值

appimagetool CPACK_PACKAGE_FILE_NAME

CPACK_APPIMAGE_PATCHELF_EXECUTABLE

patchelf 可执行文件的名称,可能位于构建目录中、具有完整路径或在 PATH 中可访问。

默认值

patchelf CPACK_APPIMAGE_PATCHELF_EXECUTABLE

CPACK_APPIMAGE_DESKTOP_FILE

已安装的 freedesktop.org 桌面文件的名称。

强制项:

默认值

CPACK_APPIMAGE_DESKTOP_FILE

CPACK_APPIMAGE_UPDATE_INFORMATION

嵌入更新信息字符串;如果安装了 zsyncmake,则生成 zsync 文件。

默认值

CPACK_APPIMAGE_UPDATE_INFORMATION

CPACK_APPIMAGE_GUESS_UPDATE_INFORMATION

基于 GitHub 或 GitLab 环境变量猜测更新信息。

默认值

CPACK_APPIMAGE_GUESS_UPDATE_INFORMATION

CPACK_APPIMAGE_COMPRESSOR

Squashfs 压缩。

默认值

CPACK_APPIMAGE_COMPRESSOR

CPACK_APPIMAGE_MKSQUASHFS_OPTIONS

传递给 mksquashfs 的参数。

默认值

CPACK_APPIMAGE_MKSQUASHFS_OPTIONS

CPACK_APPIMAGE_NO_APPSTREAM

不检查 AppStream 元数据。

默认值

CPACK_APPIMAGE_NO_APPSTREAM

CPACK_APPIMAGE_EXCLUDE_FILE

使用给定的文件作为 mksquashfs 的排除文件,除了 .appimageignore。

默认值

CPACK_APPIMAGE_EXCLUDE_FILE

CPACK_APPIMAGE_RUNTIME_FILE

要使用的运行时文件,如果未设置,则会生成一个 bash 脚本。

默认值

CPACK_APPIMAGE_RUNTIME_FILE

CPACK_APPIMAGE_SIGN

使用 gpg[2] 进行签名。

默认值

CPACK_APPIMAGE_SIGN

CPACK_APPIMAGE_SIGN_KEY

用于 gpg[2] 签名的密钥 ID。

默认值

CPACK_APPIMAGE_SIGN_KEY