conan cache

在本地缓存(recipes 和/或 packages)中执行文件操作。

conan cache path

$ conan cache path -h
usage: conan cache path [-h] [-f FORMAT] [--out-file OUT_FILE] [-v [V]]
                        [-cc CORE_CONF]
                        [--folder {export_source,source,build,metadata}]
                        reference

Show the path to the Conan cache for a given reference.

positional arguments:
  reference             Recipe reference or Package reference

options:
  -h, --help            show this help message and exit
  -f FORMAT, --format FORMAT
                        Select the output format: json
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True
  --folder {export_source,source,build,metadata}
                        Path to show. The 'build' requires a package
                        reference. If the argument is not passed, it shows
                        'exports' path for recipe references and 'package'
                        folder for package references.

conan cache path 返回给定引用的缓存路径。根据引用,它可以返回 recipe 的路径,或 package 二进制文件的路径。

假设我们已经在当前缓存中创建了一个 package,使用命令:

$ conan new cmake_lib -d name=pkg -d version=0.1
$ conan create .
...
Requirements
    pkg/0.1#cdc0d9d0e8f554d3df2388c535137d77 - Cache

Requirements
    pkg/0.1#cdc0d9d0e8f554d3df2388c535137d77:2401fa1d188d289bb25c37cfa3317e13e377a351 - Build

现在我们有兴趣获取 pkg/0.1 recipe conanfile.py 导出的路径

$ conan cache path pkg/0.1
<path to conan cache>/p/5cb229164ec1d245/e

$ ls <path to conan cache>/p/5cb229164ec1d245/e
conanfile.py  conanmanifest.txt

默认情况下,如果未指定 recipe revision,则表示缓存中的“最新” revision。这也可以通过字面量 #latest 显式指定,并且任何 recipe revision 都可以显式定义,以下命令与上述命令等效

$ conan cache path pkg/0.1#latest
<path to conan cache>/p/5cb229164ec1d245/e

# The recipe revision might be different in your case.
# Check the "conan create" output to get yours
$ conan cache path pkg/0.1#cdc0d9d0e8f554d3df2388c535137d77
<path to conan cache>/p/5cb229164ec1d245/e

与 recipe 文件夹一起,还有两个其他文件夹,对于使用此 recipe 生成的所有二进制文件都是通用的:“export_source”文件夹和“source”文件夹。两者都可以通过以下方式获得

$ conan cache path pkg/0.1 --folder=export_source
<path to conan cache>/p/5cb229164ec1d245/es

$ ls <path to conan cache>/p/5cb229164ec1d245/es
CMakeLists.txt  include/  src/

$ conan cache path pkg/0.1 --folder=source
<path to conan cache>/p/5cb229164ec1d245/s

$ ls <path to conan cache>/p/5cb229164ec1d245/s
CMakeLists.txt  include/  src/

在这种情况下,“source”文件夹的内容与“export_source”文件夹的内容相同,因为 recipe 没有实现任何 source() 方法来检索代码或对代码执行任何其他操作,例如应用补丁。

默认情况下,recipe revision 将为 #latest,这遵循与上述相同的规则。

请注意,如果 package 不是从源代码构建的,例如从服务器检索预编译的二进制文件,则这两个文件夹将不存在。

也可以通过提供 package_id 来获取二进制 package 的文件夹

# Your package_id might be different, it depends on the platform
# Check the "conan create" output to obtain yours
$ conan cache path pkg/0.1:2401fa1d188d289bb25c37cfa3317e13e377a351
<path to conan cache>/p/1cae77d6250c23b7/p

$ ls <path to conan cache>/p/1cae77d6250c23b7/p
conaninfo.txt  conanmanifest.txt  include/  lib/

与上面一样,默认情况下它将解析为“最新”的 recipe revision 和 package revision。上面的命令等效于显式定义 #latest 或确切的 revisions。以下所有命令都与上面的命令等效

$ conan cache path pkg/0.1#latest:2401fa1d188d289bb25c37cfa3317e13e377a351
<path to conan cache>/p/1cae77d6250c23b7/p

$ conan cache path pkg/0.1#latest:2401fa1d188d289bb25c37cfa3317e13e377a351#latest
<path to conan cache>/p/1cae77d6250c23b7/p

$ conan cache path pkg/0.1#cdc0d9d0e8f554d3df2388c535137d77:2401fa1d188d289bb25c37cfa3317e13e377a351
<path to conan cache>/p/1cae77d6250c23b7/p

可以访问包含所有临时构建工件的“build”文件夹

$ conan cache path pkg/0.1:2401fa1d188d289bb25c37cfa3317e13e377a351 --folder=build
<path to conan cache>/p/1cae77d6250c23b7/b

ls -al <path to conan cache>/p/1cae77d6250c23b7/b
build/  CMakeLists.txt  CMakeUserPresets.json  conaninfo.txt  include/  src/

同样,“build”文件夹仅在 package 从源代码构建时才存在。

注意

最佳实践

  • conan cache path 命令旨在用于最终检查缓存,但缓存 package 存储必须被视为只读。请勿修改、更改、删除或从缓存中添加文件。

  • 如果您使用此命令获取工件的路径然后复制它们,请考虑使用 deployer。在一般情况下,不鼓励手动从缓存中提取工件。

  • 开发人员可以使用 conan list ... --format=compact 以紧凑的方式获取完整引用,可以复制并粘贴到 conan cache path 命令中

conan cache clean

$ conan cache clean -h
usage: conan cache clean [-h] [--out-file OUT_FILE] [-v [V]] [-cc CORE_CONF]
                         [-s] [-b] [-d] [-t] [-bs] [-p PACKAGE_QUERY]
                         [pattern]

Remove non-critical folders from the cache, like source, build and/or download
(.tgz store) ones.

positional arguments:
  pattern               Selection pattern for references to clean

options:
  -h, --help            show this help message and exit
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True
  -s, --source          Clean source folders
  -b, --build           Clean build folders
  -d, --download        Clean download and metadata folders
  -t, --temp            Clean temporary folders
  -bs, --backup-sources
                        Clean backup sources
  -p PACKAGE_QUERY, --package-query PACKAGE_QUERY
                        Remove only the packages matching a specific query,
                        e.g., os=Windows AND (arch=x86 OR compiler=gcc)

此命令将删除所有临时文件夹,以及 Conan 在执行过程中生成的 source、build 和 download 文件夹。它将对 pattern 中传递的每个匹配引用执行此操作,除非提供了特定标志,在这种情况下,仅删除指定的文件夹。

示例:

  • 删除所有非关键文件

    $ conan cache clean "*"
    
  • 删除所有临时文件

    $ conan cache clean "*" --temp
    
  • 删除 zlib recipe 的 download 文件夹

    $ conan cache clean "zlib/*" --download
    
  • 删除除 zlib recipe 的 download 文件夹之外的所有内容

    $ conan cache clean "zlib/*" --source --build --temp
    

conan cache check-integrity

$ conan cache check-integrity -h
usage: conan cache check-integrity [-h] [--out-file OUT_FILE] [-v [V]]
                                   [-cc CORE_CONF] [-p PACKAGE_QUERY]
                                   pattern

Check the integrity of the local cache for the given references

positional arguments:
  pattern               Selection pattern for references to check integrity
                        for

options:
  -h, --help            show this help message and exit
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True
  -p PACKAGE_QUERY, --package-query PACKAGE_QUERY
                        Only the packages matching a specific query, e.g.,
                        os=Windows AND (arch=x86 OR compiler=gcc)

conan cache check-integrity 命令检查本地缓存中 Conan packages 的完整性。这意味着如果 conanmanifest.txt 中包含的任何文件丢失或与该文件中声明的校验和不匹配,它将抛出错误。

例如,要验证整个 Conan 本地缓存的完整性,请执行

$ conan cache check-integrity "*"
mypkg/1.0: Integrity checked: ok
mypkg/1.0:454923cd42d0da27b9b1294ebc3e4ecc84020747: Integrity checked: ok
mypkg/1.0:454923cd42d0da27b9b1294ebc3e4ecc84020747: Integrity checked: ok
zlib/1.2.11: Integrity checked: ok
zlib/1.2.11:6fe7fa69f760aee504e0be85c12b2327c716f9e7: Integrity checked: ok

conan cache backup-upload

$ conan cache backup-upload -h
usage: conan cache backup-upload [-h] [--out-file OUT_FILE] [-v [V]]
                                 [-cc CORE_CONF]

Upload all the source backups present in the cache

options:
  -h, --help            show this help message and exit
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True

conan cache backup-upload 将所有本地缓存中存在的 source backups 上传到备份服务器(不包括那些从 core.sources:exclude_urls conf 中列出的排除 url 获取的),无论它们属于哪个 package(如果有)。

conan cache save

$ conan cache save -h
usage: conan cache save [-h] [-f FORMAT] [--out-file OUT_FILE] [-v [V]]
                        [-cc CORE_CONF] [-l LIST] [--file FILE]
                        [pattern]

Get the artifacts from a package list and archive them

positional arguments:
  pattern               A pattern in the form
                        'pkg/version#revision:package_id#revision', e.g:
                        zlib/1.2.13:* means all binaries for zlib/1.2.13. If
                        revision is not specified, it is assumed latest one.

options:
  -h, --help            show this help message and exit
  -f FORMAT, --format FORMAT
                        Select the output format: json
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True
  -l LIST, --list LIST  Package list of packages to save
  --file FILE           Save to this tgz file

从缓存保存和恢复 packages 中阅读更多内容。

conan cache restore

$ conan cache restore -h
usage: conan cache restore [-h] [-f FORMAT] [--out-file OUT_FILE] [-v [V]]
                           [-cc CORE_CONF]
                           file

Put the artifacts from an archive into the cache

positional arguments:
  file                  Path to archive to restore

options:
  -h, --help            show this help message and exit
  -f FORMAT, --format FORMAT
                        Select the output format: json
  --out-file OUT_FILE   Write the output of the command to the specified file
                        instead of stdout.
  -v [V]                Level of detail of the output. Valid options from less
                        verbose to more verbose: -vquiet, -verror, -vwarning,
                        -vnotice, -vstatus, -v or -vverbose, -vv or -vdebug,
                        -vvv or -vtrace
  -cc CORE_CONF, --core-conf CORE_CONF
                        Define core configuration, overwriting global.conf
                        values. E.g.: -cc core:non_interactive=True

从缓存保存和恢复 packages 中阅读更多内容。