其他重要的 Conan 功能

python_requires

可以使用 python_requires 特性 重用其他 recipe 中的代码。

如果您维护许多针对不同软件包的 recipe,它们共享一些通用逻辑,并且您不想在每个 recipe 中重复代码,您可以将这些通用代码放在 Conan conanfile.py 文件中,将其上传到您的服务器,然后让其他 recipe conanfile 使用 python_requires = "mypythoncode/version" 来依赖并重用它。

软件包列表

可以使用“packages-list”功能管理软件包、recipe 和二进制文件的列表。多个命令,例如 upload, download, 和 remove 允许将软件包列表文件作为输入,并对该列表执行操作。一个典型的用例是“将最近一次 conan create 构建的软件包上传到服务器”,这可以通过以下方式完成:

$ conan create . --format=json > build.json
$ conan list --graph=build.json --graph-binaries=build --format=json > pkglist.json
$ conan upload --list=pkglist.json -r=myremote -c

参见此部分中的 示例

从缓存中移除未使用的软件包

警告

最近最少使用功能处于 预览 状态。有关更多信息,请参阅 Conan 稳定性 部分。

Conan 缓存不实现任何自动过期策略,因此除非定期移除软件包或缓存本身,否则其大小会不断增加。可以移除最近未使用的 recipe 和软件包,同时保留在给定时间段内使用过的那些(最近最少使用 LRU 策略)。这可以通过 conan removeconan list 命令的 --lru 参数来实现:

# remove all binaries (but not recipes) not used in the last 4 weeks
$ conan remove "*:*" --lru=4w -c
# remove all recipes that have not been used in the last 4 weeks (with their binaries)
$ conan remove "*" --lru=4w -c

请注意,LRU 时间遵循 remove 命令的规则。如果使用 "*" 模式移除 recipe,则只会检查 recipe 的 LRU 时间。如果一个 recipe 最近被使用过,它会保留所有二进制文件;如果 recipe 最近没有被使用过,它会移除自身及其所有二进制文件。如果使用 "*:*" 模式,它将只检查二进制文件,并移除那些未使用的二进制文件,但始终保留 recipe。

首先使用 conan list (请注意,与 remove 不同,conan list 默认不列出所有修订版,因此如果意图是选择所有修订版,需要显式指定 #*)可以创建最近最少使用的软件包列表:

# List all unused (last 4 weeks) recipe revisions
$ conan list "*#*" --lru=4w --format=json > old.json
# Remove those recipe revisions (and their binaries)
$ conan remove --list=old.json -c

参见命令帮助 conan removeconan list