本文档翻译自:https://docs.conan.io/en/latest/creating_packages/understand_packaging.html
手动创建测试包
以前使用test_package子文件夹的create方法不是必需的,尽管强烈建议使用。如果我们不想使用test_package功能,我们可以自己编写配方,或者使用不带 -t
的 conan new
命令,命令行参数。
$ mkdir mypkg && cd mypkg
$ conan new hello/0.1
这将只创建conanfile.py配方文件。现在,我们可以创建包:
$ conan create . demo/testing
这相当于:
$ conan export . demo/testing
$ conan install hello/0.1@demo/testing --build=hello
创建软件包后,可以通过向项目conanfile.txt或conanfile.py需求中添加hello/0.1@demo/test
并运行以下命令来像使用其他任何软件包一样使用它:
$ conan install .
# build and run your project to ensure the package works
包的创建过程
对于包创建者和Conan用户来说,了解在conan本地缓存中创建包的流程及其布局非常有用。
每个包配方在本地缓存中包含五个重要文件夹:
- expot: 存储包配方的文件夹。
- export_source: 使用配方
exports_sources
属性复制的代码存储在该文件夹中。 - source: 用来存储从源代码构建源代码的文件夹。
- build: 完成实际源代码编译的文件夹。 对于每种不同的二进制配置,通常会有一个子文件夹。(比如cmake 执行完 cmake 命令生成除了最终文件还有一大段过程文件)
- package: 最终程序包工件所在的文件夹。 每个不同的二进制配置将有一个子文件夹。(只有最终文件,没有编译过程文件)
仅当从源构建包时,源文件夹和构建文件夹才存在。
当包通过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
功能还会将工件从本地缓存复制到用户空间 (如果指定)。