When building a part to construct a snap, Snapcraft creates the following sets of environment variables that can optionally be used by a part’s build mechanism:
Environment variables can be accessed via the override- keywords with shell commands and Scriptlets, or more generally within your project’s build infrastructure.
See Adding parts for a general overview of what parts are and how to use them, and for more details on how parts are built within the snapcraft environment, including build stages and the directories they use, see Parts lifecycle.
ⓘ For the various environment variables available to running snap applications, see Environment variables.
Locating directories
See Parts lifecycle and Parts directories for details on which directories are created and used when building a part.
core | core18 | core20
Snapcraft exposes the following directory related environment variables when building a part with bases core
, core18
, or core20
. These can help when moving or locating files:
SNAPCRAFT_PART_SRC |
absolute path to where a part’s sources are pulled. It’s also the part’s working directory for the pull step |
SNAPCRAFT_PART_BUILD |
absolute path to the sources used for the part’s build step. It is also the working directory of the build step. |
SNAPCRAFT_PART_INSTALL |
absolute path to the results of the part’s build step. It also contains the staged packages of that part. |
SNAPCRAFT_PRIME |
absolute path to where files are primed |
SNAPCRAFT_PROJECT_DIR |
absolute path to the root of the snapcraft project |
SNAPCRAFT_STAGE |
absolute path to where files are staged |
core22 | core24
Snapcraft exposes the following directory-related environment variables when building with bases core22
and core24
. These can help when moving or locating files:
CRAFT_PART_SRC SNAPCRAFT_PART_SRC |
absolute path to where a part’s sources are pulled. It’s also the part’s working directory for the pull step |
CRAFT_PART_SRC_WORK SNAPCRAFT_PART_SRC |
absolute path to the part source subdirectory, if any. Defaults to the part source directory. |
CRAFT_PART_BUILD SNAPCRAFT_PART_BUILD |
absolute path to the sources used for the part’s build step. It is also the working directory of the build step. |
CRAFT_PART_BUILD_WORK SNAPCRAFT_PART_BUILD_WORK |
absolute path to the part build subdirectory in case of out-of-tree builds. Defaults to the part source directory. |
CRAFT_PART_INSTALL SNAPCRAFT_PART_INSTALL |
absolute path to the results of the part’s build step. It also contains the staged packages of that part. |
CRAFT_PRIME SNAPCRAFT_PRIME |
absolute path to where files are primed |
CRAFT_PROJECT_DIR SNAPCRAFT_PROJECT_DIR |
absolute path to the root of the snapcraft project |
CRAFT_STAGE SNAPCRAFT_STAGE |
absolute path to where files are staged |
CRAFT_OVERLAY |
absolute path the part’s layer directory during the OVERLAY step if overlays are enabled. |
Snapcraft configuration
For all environment variables related to system architectures, Snapcraft uses the debian-style naming convention. See this page for a list of supported architectures.
#supported-architectures
core | core18
When building a part with bases core
or core18
, the following snapcraft environment variables are set:
SNAPCRAFT_ARCH_TRIPLET |
The deb-style architecture triplet specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. |
SNAPCRAFT_PARALLEL_BUILD_COUNT |
the preferred number of jobs the project is to be built with |
SNAPCRAFT_PROJECT_NAME |
the snapcraft project name as set by name in snapcraft.yaml |
SNAPCRAFT_PROJECT_VERSION |
the snapcraft project version as set by version in snapcraft.yaml |
SNAPCRAFT_PROJECT_GRADE |
the snapcraft project grade as set in snapcraft.yaml |
SNAPCRAFT_TARGET_ARCH |
the deb-style architecture that snap is being built for, e.g. “amd64”, “armhf”, “arm64”, etc. |
core20
When building a part with base core20
, the following snapcraft environment variables are set:
SNAPCRAFT_ARCH_BUILD_FOR |
the deb-style architecture of the platform the snap is built for. |
SNAPCRAFT_ARCH_BUILD_ON |
the deb-style architecture of the platform the snap is built on. |
SNAPCRAFT_ARCH_TRIPLET_BUILD_FOR |
the deb-style architecture triplet of the platform the snap is built for |
SNAPCRAFT_ARCH_TRIPLET_BUILD_ON |
the deb-style architecture triplet of the platform the snap is built on |
SNAPCRAFT_ARCH_TRIPLET |
The deb-style architecture triplet specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. |
SNAPCRAFT_PARALLEL_BUILD_COUNT |
the preferred number of jobs the project is to be built with |
SNAPCRAFT_PROJECT_NAME |
the snapcraft project name as set by name in snapcraft.yaml |
SNAPCRAFT_PROJECT_VERSION |
the snapcraft project version as set by version in snapcraft.yaml |
SNAPCRAFT_PROJECT_GRADE |
the snapcraft project grade as set in snapcraft.yaml |
SNAPCRAFT_TARGET_ARCH |
The deb-style architecture specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. |
core22
When building a part with base core22
, the following snapcraft environment variables are set:
CRAFT_ARCH_BUILD_FOR |
the deb-style architecture of the platform the snap is built for (available in snapcraft 8.0+) |
CRAFT_ARCH_BUILD_ON |
the deb-style architecture of the platform the snap is built on (available in snapcraft 8.0+) |
CRAFT_ARCH_TRIPLET_BUILD_FOR |
the deb-style architecture triplet of the platform the snap is built for (available in snapcraft 8.0+) |
CRAFT_ARCH_TRIPLET_BUILD_ON |
the deb-style architecture triplet of the platform the snap is built on (available in snapcraft 8.0+) |
CRAFT_ARCH_TRIPLET SNAPCRAFT_ARCH_TRIPLET |
The deb-style architecture triplet specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. (deprecated in snapcraft 8.0, use CRAFT_ARCH_TRIPLET_BUILD_FOR instead) |
CRAFT_TARGET_ARCH SNAPCRAFT_TARGET_ARCH |
The deb-style architecture specified by --target-arch . If a target arch is not provided, then the architecture of the build-on platform is used. (deprecated in snapcraft 8.0, use CRAFT_ARCH_BUILD_FOR instead) |
CRAFT_PARALLEL_BUILD_COUNT SNAPCRAFT_PARALLEL_BUILD_COUNT |
the preferred number of jobs the project is to be built with |
CRAFT_PROJECT_NAME SNAPCRAFT_PROJECT_NAME |
the snapcraft project name as set by name in snapcraft.yaml |
SNAPCRAFT_PROJECT_VERSION |
the snapcraft project version as set by snapcraft.yaml |
SNAPCRAFT_PROJECT_GRADE |
the snapcraft project grade as set in snapcraft.yaml |
CRAFT_PART_NAME |
the part currently being processed, as set by the part’s name in snapcraft.yaml |
CRAFT_STEP_NAME |
the step currently being executed (i.e. PRIME ) |
core24
When building a part with base core24
, the following snapcraft environment variables are set:
CRAFT_ARCH_BUILD_FOR |
the deb-style architecture of the platform the snap is built for |
CRAFT_ARCH_BUILD_ON |
the deb-style architecture of the platform the snap is built on |
CRAFT_ARCH_TRIPLET_BUILD_FOR |
the deb-style architecture triplet of the platform the snap is built for |
CRAFT_ARCH_TRIPLET_BUILD_ON |
the deb-style architecture triplet of the platform the snap is built on |
CRAFT_PARALLEL_BUILD_COUNT SNAPCRAFT_PARALLEL_BUILD_COUNT |
the preferred number of jobs the project is to be built with |
SNAPCRAFT_PROJECT_NAME |
the snapcraft project name as set by name in snapcraft.yaml |
SNAPCRAFT_PROJECT_VERSION |
the snapcraft project version as set by snapcraft.yaml |
SNAPCRAFT_PROJECT_GRADE |
the snapcraft project grade as set in snapcraft.yaml |
CRAFT_PART_NAME |
the part currently being processed, as set by the part’s name in snapcraft.yaml |
CRAFT_STEP_NAME |
the step currently being executed (i.e. PRIME ) |
Build flags
The following specific build flags are also set:
CFLAGS |
empty unless after is used in the part and headers are staged in the common include paths for which they will be included (i.e.; paths added with -I ) |
CPPFLAGS |
same behavior as CFLAGS |
CXXFLAGS |
same behavior as CFLAGS |
LDFLAGS |
empty unless after is used in the part and headers are staged in the common library paths (i.e.; paths added with -L ) |
PKG_CONFIG_PATH |
empty unless after is used in the part and .pc files are staged in the common pkgconfig paths |
Plugin variables
A part’s plugin can add its own set of environment variables, or expand on the above build related flags.
The build-environment
keyword can be used to either override the default environment variables or define new ones. Here is a basic example:
parts:
hello-part:
source: gnu-hello.tar.gz
plugin: autotools
build-environment:
- CFLAGS: "$CFLAGS -O3" # add -O3 to the existing flags
- LDFLAGS: "-L$SNAPCRAFT_STAGE/non-standard/lib"
The above example will override default flags and search for libraries in a non-standard path.
For a complete list of environment variables, see Environment variables exposed by Snapcraft.