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),具体取决于文件夹的内容。

这是一个开发者和调试命令, intended for occasional developer usage while debugging potential issues, but it is not recommended for any other use case.

注意

最佳实践

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