本文档翻译自:https://docs.conan.io/en/latest/creating_packages/understand_packaging.html

手动创建测试包

以前使用test_package子文件夹的create方法不是必需的,尽管强烈建议使用。如果我们不想使用test_package功能,我们可以自己编写配方,或者使用不带 -t conan new 命令,命令行参数。

  1. $ mkdir mypkg && cd mypkg
  2. $ conan new hello/0.1

这将只创建conanfile.py配方文件。现在,我们可以创建包:

  1. $ conan create . demo/testing

这相当于:

  1. $ conan export . demo/testing
  2. $ conan install hello/0.1@demo/testing --build=hello

创建软件包后,可以通过向项目conanfile.txtconanfile.py需求中添加hello/0.1@demo/test并运行以下命令来像使用其他任何软件包一样使用它:

  1. $ conan install .
  2. # build and run your project to ensure the package works

包的创建过程

对于包创建者和Conan用户来说,了解在conan本地缓存中创建包的流程及其布局非常有用。

每个包配方在本地缓存中包含五个重要文件夹:

  • expot: 存储包配方的文件夹。
  • export_source: 使用配方exports_sources属性复制的代码存储在该文件夹中。
  • source: 用来存储从源代码构建源代码的文件夹。
  • build: 完成实际源代码编译的文件夹。 对于每种不同的二进制配置,通常会有一个子文件夹。(比如cmake 执行完 cmake 命令生成除了最终文件还有一大段过程文件)
  • package: 最终程序包工件所在的文件夹。 每个不同的二进制配置将有一个子文件夹。(只有最终文件,没有编译过程文件)

仅当从源构建包时,源文件夹和构建文件夹才存在。
了解打包 - 图1
当包通过conan export命令 “导出” 时,该过程开始,或者更典型地,使用conan create命令。Conanfile.py和由exports_source字段指定的文件从用户空间复制到本地缓存。

将export和export_source文件复制到源文件夹,然后执行source() 方法 (如果存在)。请注意,所有二进制包只有一个源文件夹。如果在生成代码时,源代码因不同配置而有所不同,则不能使用source()方法生成,而需要使用build() 生成方法。

然后,对于设置和选项的每个不同配置,将以该配置的SHA-1 哈希的形式计算包ID。源将被复制到build/hashXXX文件夹,并且将触发 build() 方法。

之后,将调用package() 方法将工件从build/hashXXX文件夹复制到package/hashXXX文件夹。

最后,将调用并收集所有依赖项的package_info() 方法,以便您可以为消费者构建系统生成文件,就像cmake generator的conanbuildinfo.cmake一样。此外,imports功能还会将工件从本地缓存复制到用户空间 (如果指定)。