export()¶
等效于 exports
属性,但以方法形式存在。此方法将在 export
时刻被调用,这发生在 conan export
, conan export-pkg
和 conan create
命令中,其目的是允许从用户文件夹复制文件到 Conan 缓存文件夹,从而使文件成为 recipe 的一部分。这些源文件将与 recipe 一起上传到服务器,并且始终与 recipe 一起下载。
当前工作目录将是 self.recipe_folder
,并且可以使用 self.export_folder
作为目标文件夹,以使用 copy()
或您的自定义复制。
from conan import ConanFile
from conan.tools.files import copy
class Pkg(ConanFile):
def export(self):
# This LICENSE file is intended to be the license of the current conanfile.py recipe
# and go with it. It is not intended to be the license of the final package (for that
# purpose export_sources() would be recommended)
copy(self, "LICENSE.md", self.recipe_folder, self.export_folder)
有 2 个文件始终导出到缓存,而无需在 recipe 中显式定义:conanfile.py
recipe 和 conandata.yml
文件(如果存在)。 conandata.yml
文件在每次加载 conanfile.py
时都会自动加载,成为 self.conan_data
属性,因此它是 recipe 的内在组成部分,因此它是“exported” recipe 文件的一部分,而不是“exported”源文件的一部分。
注意
最佳实践
Recipe 文件必须是配置独立的。这些文件对于所有配置都是通用的,因此不可能对不同的 settings、options 或平台执行条件
export()
。不要尝试进行任何类型的条件导出。如果需要,一次导出所有配置所需的所有文件。export()
方法不接收来自 profile 的任何信息,甚至不接收conf
。只有global.conf
可用,并且在任何情况下都不可能使用该conf
来定义条件。保持
export()
方法的简洁性。它的目的是将文件从用户文件夹复制到缓存,以便将这些文件与 recipe 一起存储。导出的文件必须很小。用 recipe 导出大文件会使依赖关系解析速度慢得多。
只有评估
conanfile.py
recipe 所必需的文件才必须使用此方法导出。从源代码构建所需的文件应使用exports_sources
属性或 export_source() 方法导出。