conan cache

在本地缓存(配方和/或软件包)中执行文件操作。

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 命令会返回给定引用的缓存路径。根据引用,它可以返回配方路径,也可以返回软件包二进制文件的路径。

假设我们已经在当前的缓存中创建了一个包,使用

$ 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 配方 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

默认情况下,如果未指定配方修订版本,则表示缓存中的“最新”修订版本。也可以通过字面量 #latest 来明确指定,也可以明确定义任何配方修订版本,这些命令与上面的命令等效

$ 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

除了配方文件夹外,还有两个与此配方生成的所有二进制文件通用的文件夹:“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”文件夹的内容相同,因为配方没有实现任何 source() 方法来检索代码或对代码执行任何其他操作,例如应用补丁。

默认情况下,配方修订版本将是 #latest,这遵循与上面相同的规则。

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

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

# 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/

与上面一样,默认情况下它将解析为“最新”的配方修订版本和包修订版本。上面的命令等同于显式定义 #latest 或确切的修订版本。以下所有命令都与上面的命令等效

$ 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”文件夹仅在包从源代码构建时存在。

注意

最佳实践

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

  • 如果您使用此命令获取工件路径然后复制它们,请考虑改用 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]
                         [-l LIST] [-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
  -l LIST, --list LIST  Package list of packages to clean
  -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 中匹配的每个引用执行此操作,或者如果使用 --list 选项,则会处理 pkglist 文件中的内容。可以使用不同的标志将清理限制在特定类型的文件夹。

示例:

  • 删除所有非关键文件

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

    $ conan cache clean "*" --temp
    
  • 删除 zlib 配方的下载文件夹

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

    $ conan cache clean "zlib/*" --source --build --temp
    
  • 获取要从中删除临时文件的包列表,然后删除它们

    $ conan list "zlib/*" -f=json > pkglist.json
    $ conan cache clean --list pkglist.json
    

conan cache check-integrity

$ conan cache check-integrity -h
usage: conan cache check-integrity [-h] [--out-file OUT_FILE] [-v [V]]
                                   [-cc CORE_CONF] [-l LIST]
                                   [-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
  -l LIST, --list LIST  Package list of packages to check integrity for
  -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 命令会检查本地缓存中与给定 pattern 匹配的 Conan 包的完整性,或者如果使用 --list 选项,则检查 pkglist 文件中的内容。这意味着,如果 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.3.1: Integrity checked: ok
zlib/1.3.1: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 命令会将本地缓存中的所有源备份上传到备份服务器(不包括从 core.sources:exclude_urls 配置中列出的 URL 获取的备份),无论它们属于哪个包。

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] [--no-source]
                        [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
  --no-source           Exclude the sources

将包保存到/从缓存恢复 中了解更多信息。

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

将包保存到/从缓存恢复 中了解更多信息。

conan cache ref

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

Show the reference for a given Conan cache folder

positional arguments:
  path                  Path to a Conan cache folder

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 引用,即形式为 name/version#recipe_revision 的配方引用,或者形式为 name/version#recipe_revision:package_id#package_revision 的包引用(两者也可能包含 user/channel),具体取决于文件夹的内容。

这是一个开发人员和调试命令,旨在供开发人员偶尔用于调试潜在问题,但不建议用于任何其他用例。

注意

最佳实践

导航 Conan 缓存不是预期或支持的用例。强烈建议不要在任何自动化、CI 或脚本中使用 conan cache ref 命令。 conan cache ref 仅旨在作为开发人员在调试时的辅助命令。