Deployers¶
Deployers 是一种机制,用于方便地将文件从一个文件夹(通常是 Conan 缓存)复制到用户文件夹。虽然 Conan 提供了两个内置的 deployer (full_deploy
和 direct_deploy
),但用户可以使用 conan config install
轻松管理自己的 deployer。
Deployers 在生成器之前运行,并且可以更改目标文件夹。例如,如果 --deployer=full_deploy
deployer 在 CMakeDeps
之前运行,则 CMakeDeps
生成的文件将指向 full_deploy
deployer 在用户文件夹中完成的本地副本,而不是 Conan 缓存。可以通过提供多个 --deployer=
参数来指定多个 deployer,它们将按出现顺序运行。
Deployers 可以是多配置的。重复运行 conan install . --deployer=full_deploy
以获得不同的 profile 可以实现完全自包含的项目,包括所有工件、二进制文件和构建文件。此项目将完全独立于 Conan,并且不再需要在构建时使用它。使用 --deployer-folder
参数可以根据需要更改 deployer 的基本文件夹输出路径。
内置 deployer¶
full_deploy¶
将每个依赖项的每个软件包文件夹部署到您的 recipe 的 output_folder
中,并在子文件夹树中基于
构建上下文
依赖项名称和版本
构建类型
构建架构
然后每个依赖项将最终位于如下文件夹中
[OUTPUT_FOLDER]/full_deploy/host/dep/0.1/Release/x86_64
请参阅 创建用于开发者使用的依赖项的与 Conan 无关的部署,查看 full_deploy
deployer 用法的完整示例。
direct_deploy¶
与 full_deploy
相同,但仅处理您的 recipe 的直接依赖项。此 deployer 将在如下树状文件夹中输出您的依赖项
[OUTPUT_FOLDER]/direct_deploy/dep
警告
内置 deployer 处于预览状态。有关更多信息,请参阅 Conan 稳定性 部分。
配置¶
当 conf tools.deployer:symlinks
设置为 False
以禁用 deployer 复制符号链接时,full_deploy
和 direct_deploy
都能理解。这在不支持符号链接的系统中可能很方便,并且如果部署包含符号链接的软件包可能会失败。
自定义 deployer¶
自定义 deployer 可以通过 conan config install
进行管理。当查找特定的 deployer 时,Conan 将按以下顺序在这些位置查找 deployer
绝对路径
相对于 cwd
在
[CONAN_HOME]/extensions/deployers
文件夹中作为内置 deployer
Conan 将查找 deploy()
方法,以便为每个安装的文件调用。您的自定义 deployer 的函数签名应如下所示
def deploy(graph, output_folder: str, **kwargs):
(请注意,参数作为命名参数传递,因此 graph
和 output_folder
名称都是必需的)
即使不使用 **kwargs
,它也是必需的,因为未来 Conan 版本中可能会添加新参数,如果未定义 **kwargs
,这些参数将会中断。
您可以使用 graph.root.conanfile
访问您的 conanfile 对象。有关如何迭代其依赖项的信息,请参阅 ConanFile.dependencies。您的自定义 deployer 现在可以像内置 deployer 一样调用,使用它所在的文件名,在本例中为 conan install . --deployer=my_custom_deployer
。请注意,提供 .py 扩展名是可选的。
有关如何实现您自己的 deployer 的示例,请参阅 自定义 deployer 部分。