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