Help/cpack_gen/appimage.rst
.. versionadded:: 4.2
The CPack AppImage_ generator enables bundling an application into the
AppImage format. It uses appimagetool to pack the application
and patchelf to set the application RPATH to a relative path
based on where the AppImage will be mounted.
.. _AppImage: https://appimage.org
The appimagetool does not scan for libraries dependencies. It only
packs the installed content and checks if the provided .desktop file
was properly created. For best compatibility, it's recommended to build on
an old LTS distribution and to include any dependencies in the generated file.
The snippet below can be added to your CMakeLists.txt file.
Replace my_application_target with your application target.
The example will do a best effort to identify the libraries your
application links to and copy them to the install location.
.. code-block:: cmake
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()
]])
The CPack AppImage generator will generate a default AppRun_ based on the
provided .desktop entry. Alternatively, if a custom AppRun is
installed, e.g., via the :command:install command, it will be used instead
of the generated one.
.. _AppRun: https://docs.appimage.org/introduction/software-overview.html#apprun
For Qt-based projects, it is recommended to call
qt_generate_deploy_app_script() or qt_generate_deploy_qml_app_script()
and install the files generated by the script. This will install the
Qt plugins.
You must also set :variable:CPACK_PACKAGE_ICON with the same value
listed in the Desktop file.
Variables Specific to CPack AppImage Generator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. variable:: CPACK_APPIMAGE_TOOL_EXECUTABLE
Name of the appimagetool executable. If not given as an absolute path,
logic based on :command:find_program will be used internally with this
value to find the executable.
:Default: appimagetool
.. variable:: CPACK_APPIMAGE_PATCHELF_EXECUTABLE
Name of the patchelf executable. If not given as an absolute path,
logic based on :command:find_program will be used internally with this
value to find the executable.
:Default: patchelf
.. variable:: CPACK_APPIMAGE_DESKTOP_FILE
Name of the freedesktop.org desktop file to be installed. If not specified,
the first .desktop file found in the list of files to be installed will
be used. There must be a valid .desktop file for the package, and it
must include an Icon entry that matches :variable:CPACK_PACKAGE_ICON
without the file extension. The actual installed location of the icon
should follow the freedesktop.org specification.
:Default: Unset
.. variable:: CPACK_APPIMAGE_UPDATE_INFORMATION
Embed the value of this variable as the update information. See the
appimagetool source code for the supported values and formats of the
--updateinformation option. It is highly recommended to have
the zsyncmake tool installed if using zsync update information.
:Default: Unset
.. variable:: CPACK_APPIMAGE_GUESS_UPDATE_INFORMATION
When this variable is true, add the --guess option to the
appimagetool invocation. This directs the tool to try to guess
appropriate update information based on GitHub or GitLab environment
variables.
:Default: Unset
.. variable:: CPACK_APPIMAGE_COMPRESSOR
Override the appimagetool's default type of squashfs compression (zstd).
This corresponds to the appimagetool --comp option.
:Default: Unset
.. variable:: CPACK_APPIMAGE_MKSQUASHFS_OPTIONS
List of arguments to pass through to mksquashfs. Each of these will be
preceded by --mksquashfs-opt on the appimagetool command line.
:Default: Unset
.. variable:: CPACK_APPIMAGE_NO_APPSTREAM
If set to true, do not check AppStream metadata. This passes the
--no-appstream option to appimagetool.
:Default: Unset
.. variable:: CPACK_APPIMAGE_EXCLUDE_FILE
Use the specified file as an exclude file for mksquashfs,
in addition to .appimageignore. This uses the --exclude-file
option to appimagetool.
:Default: Unset
.. variable:: CPACK_APPIMAGE_RUNTIME_FILE
Specify a runtime file to use instead of letting the appimagetool
download a runtime to embed in the generated AppImage.
:Default: Unset
.. variable:: CPACK_APPIMAGE_SIGN
When set to true, sign the generated AppImage with gpg[2].
:variable:CPACK_APPIMAGE_SIGN_KEY should also be specified if using this
option.
:Default: Unset
.. variable:: CPACK_APPIMAGE_SIGN_KEY
Key ID to use for gpg[2] signatures when signing is enabled with
:variable:CPACK_APPIMAGE_SIGN.
:Default: Unset