其他重要的 Conan 功能

python_requires

可以使用 python_requires 功能 重用其他配方中的代码。

如果您维护许多针对不同包的配方,并且这些配方共享一些通用逻辑,而您不想在每个配方中重复代码,则可以将该通用代码放入 Conan 的 conanfile.py 中,将其上传到您的服务器,并让其他配方 conanfile 执行 python_requires = "mypythoncode/version" 来依赖它并重用它。

包列表

可以使用“包列表”功能管理包、配方和二进制文件的列表。一些命令(如 uploaddownloadremove)允许接收包文件列表作为输入,并且可以在该列表上执行操作。一个典型的用例是“将上次 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 缓存没有实现任何自动过期策略,因此其大小将始终增加,除非删除包或定期删除缓存。可以删除最近未使用过的配方和包,同时保留在给定时间段内使用过的包(最近最少使用 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 命令的规则。如果我们使用 "*" 模式删除配方,则仅检查配方的 LRU 时间。如果配方最近被使用过,则它将保留所有二进制文件,如果配方最近未使用过,则它将删除自身及其所有二进制文件。如果我们使用 "*:*" 模式,则它将仅检查二进制文件,并删除未使用的二进制文件,但始终保留配方。

首先使用 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