部署器

部署器是一种机制,用于方便地将文件从一个文件夹(通常是 Conan 缓存)复制到用户文件夹。虽然 Conan 提供了两个内置的部署器(full_deploydirect_deploy),但用户可以使用 conan config install 轻松管理自己的部署器。

部署器在生成器之前运行,它们可以更改目标文件夹。例如,如果 --deployer=full_deploy 部署器在 CMakeDeps 之前运行,则 CMakeDeps 生成的文件将指向 full_deploy 部署器在用户文件夹中完成的本地副本,而不是 Conan 缓存。可以通过提供多个 --deployer= 参数来指定多个部署器,它们将按照出现的顺序运行。

部署器可以是多配置的。对不同的配置文件重复运行 conan install . --deployer=full_deploy 可以实现一个完全自包含的项目,包括所有工件、二进制文件和构建文件。此项目将完全独立于 Conan,并且不再需要它来构建。使用 --deployer-folder 参数可以根据需要更改部署器的基本文件夹输出路径。

内置部署器

full_deploy

将每个依赖项的每个包文件夹部署到你的配方的 output_folder 中的子文件夹树中,基于

  1. 构建上下文

  2. 依赖项名称和版本

  3. 构建类型

  4. 构建架构

然后,每个依赖项最终都会进入如下的文件夹中

[OUTPUT_FOLDER]/full_deploy/host/dep/0.1/Release/x86_64

请参阅 为开发人员使用创建依赖项的与 Conan 无关的部署full_deploy 部署器的完整用法示例。

direct_deploy

full_deploy 相同,但仅处理你的配方的直接依赖项。此部署器将在如下的树形文件夹中输出你的依赖项

[OUTPUT_FOLDER]/direct_deploy/dep

警告

内置部署器处于预览状态。请参阅 Conan 稳定性 部分以获取更多信息。

配置

当配置 tools.deployer:symlinks 设置为 False 以禁用部署器复制符号链接时,full_deploydirect_deploy 都会理解。这在不支持符号链接的系统中可能很方便,并且如果部署包含符号链接的包可能会失败。

自定义部署器

自定义部署器可以通过 conan config install 进行管理。当查找特定的部署器时,Conan 将按照以下顺序在这些位置查找部署器

  1. 绝对路径

  2. 相对于 cwd

  3. [CONAN_HOME]/extensions/deployers 文件夹中

  4. 作为内置部署器

Conan 将查找一个 deploy() 方法来调用每个已安装的文件。自定义部署器的函数签名应如下所示

my_custom_deployer.py
def deploy(graph, output_folder: str, **kwargs):

(请注意,参数作为命名参数传递,因此 graphoutput_folder 名称都是强制性的)

**kwargs 是强制性的,即使未使用,因为在未来的 Conan 版本中可能会添加新参数,如果未定义 **kwargs,这些参数将会中断。

你可以使用 graph.root.conanfile 访问你的 conanfile 对象。有关如何迭代其依赖项的信息,请参阅 ConanFile.dependencies。你的自定义部署器现在可以像内置部署器一样被调用,使用它所在的文件的文件名,在本例中为 conan install . --deployer=my_custom_deployer。请注意,提供 .py 扩展名是可选的。

有关如何实现你自己的部署器的示例,请参阅 自定义部署器 部分。