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)
有两个文件始终会被导出到缓存,而无需在 recipe 中显式定义:conanfile.py recipe 文件,以及存在的 conandata.yml 文件。每当加载 conanfile.py 时,都会自动加载 conandata.yml 文件,并将其变为 self.conan_data 属性,因此它是 recipe 的内在组成部分,是“导出的”recipe 文件的一部分,而不是“导出的”源文件的一部分。
注意
最佳实践
Recipe 文件必须是与配置无关的。这些文件对所有配置都是通用的,因此不可能进行针对不同设置、选项或平台的条件性
export()。不要尝试进行任何形式的条件性导出。如果需要,一次性导出所有配置所需的文件。export()方法不接收来自 profile 的任何信息,甚至不接收conf。只有global.conf可用,并且在任何情况下都不能使用该conf来定义条件。保持
export()方法简单。其目的是将文件从用户文件夹复制到缓存,以便这些文件与 recipe 一起存储。导出的文件必须很小。将大文件与 recipe 一起导出将大大减慢依赖项的解析速度。
只有对评估
conanfile.pyrecipe 所必需的文件才必须通过此方法导出。从源代码构建所需的文件应通过exports_sources属性或 export_source() 方法导出。