Conan 1.16:支持 GCC 8.3 和 9.1,级联构建模式 & conan new 命令的自定义模板
我们发布了 Conan 1.16 版本,其中包含一些新功能和许多修复。我们也正在分享即将推出的增强功能的开发进展!
支持 GCC 8.3 和 9.1
遵循 GCC 版本发布,我们更新了默认的 settings.yml,以包含编译器的最新版本。
请注意,Conan 默认仅使用 GCC 的主版本(8、9 等),因为次版本实际上是补丁版本,并且旨在完全二进制兼容。不过,可以在配置文件和命令行中显式定义 8.3 和 9.1 次版本,但它们将生成与其他 GCC 次版本(如 8.2)不同的二进制文件。
在某些情况下,使用特定版本创建二进制文件会很方便,但是,仅遵循主版本在二进制兼容性方面应该没问题。
级联构建模式
源于一项功能请求,一些用户询问如何在上游依赖项发生更改时使下游依赖项重新构建。实际上,可以通过正确建模包 ID 在配方中或全局 更改包 ID 模式来实现此行为。
但是,这是一种细粒度的控制,仅在提升依赖项的版本时有效,而当依赖项被再次编译时则无效。为了解决这种情况,我们在 策略中引入了 --build cascade
。
例如,假设我们有一个应用程序需要 cppzmq/4.3.0@bincrafters/stable
,并且我们的 app
项目具有以下依赖关系图
现在假设由于某种原因,需要构建上游依赖项 libsodium/1.0.16@bincrafters/stable
,例如,我们在某个头文件中修复了一个错误(我们使用 --build libsodium
强制重新构建)。现在,我们可以使用 cascade
模式安装依赖项,Conan 将将其标记为 Build
以及下游依赖项
$ conan install .. --build libsodium --build cascade
libsodium/1.0.16@bincrafters/stable: Forced build from source
zmq/4.2.5@bincrafters/stable: Forced build from source
cppzmq/4.3.0@bincrafters/stable: Forced build from source
conanfile.py (app/0.0.1@None/None): Installing package
Requirements
cppzmq/4.3.0@bincrafters/stable from 'conan-center' - Cache
libsodium/1.0.16@bincrafters/stable from 'conan-center' - Cache
zmq/4.2.5@bincrafters/stable from 'conan-center' - Cache
Packages
cppzmq/4.3.0@bincrafters/stable:5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 - Build
libsodium/1.0.16@bincrafters/stable:6cc50b139b9c3d27b3e9042d5f5372d327b3a9f7 - Build
zmq/4.2.5@bincrafters/stable:92105e8fc16d129eb40755d7d2152c4855f68c46 - Build
这对于执行基本的 CI 重新构建操作也很有用。如果要在上游依赖项更改时重新构建,可以检查构建顺序并为每个依赖项触发一个 CI 作业,如下所示
$ conan info .. --build libsodium --build cascade --graph=f.html
libsodium/1.0.16@bincrafters/stable: Forced build from source
zmq/4.2.5@bincrafters/stable: Forced build from source
cppzmq/4.3.0@bincrafters/stable: Forced build from source
libsodium/1.0.16@bincrafters/stable, zmq/4.2.5@bincrafters/stable, cppzmq/4.3.0@bincrafters/stable
带模板的 Conan new
这是一个不太高级的功能,但在创建新配方时仍然非常有用,它是在 conan new
命令中添加了新的 --template
标志。模板文件支持 jinja 语法,目前仅有的可用变量是包的 name
和 version
。
Conan 将在 ~/.conan/templates
文件夹中查找模板文件,或者使用指向模板文件的绝对路径。
例如,可以使用以下代码生成新的 Conan 配方
template.py
class {{package_name}}Conan(ConanFile):
name = "{{name}}"
version = "{{version}}"
像这样创建新的包
$ conan new library/1.0.0 --template=template.py
放在 Conan 缓存中的模板将受益于通过 conan config install
命令共享。请查看 此处的文档。
次要改进和修复
- Conan 命令执行的任何警告或错误现在都将打印到
stderr
:这对于在 CI 中捕获特定错误、向用户提供有意义的错误输出或创建错误日志很有用。 - Conan 执行现在将返回
6
退出代码(无效配置),用于 配方中的受限设置。 - 使用完整引用上传特定包的新语法
conan upload <ref>:<package_id>
(--package
参数现已弃用)。 - Meson 构建帮助程序现在能够使用 适当的编译器标志。
正在进行的开发
就像我们在之前的版本发布文章中所做的那样,Conan 团队正在全力开发关键功能。在此版本中,我们一直在处理锁定文件(也称为图形锁)、新的交叉构建模型和 cpp_info
组件。
您可以在以下链接中查看这些功能的状态
- 锁定文件:conan-io/conan#5035。
- 交叉构建:conan-io/conan#5202。
cpp_info
组件:conan-io/conan#5242。
请注意,这项工作仍处于最终功能的草稿阶段。欢迎任何反馈。
与往常一样,您可以在 更改日志中查看完整的功能和修复列表。我们欢迎您在 GitHub 上提出 新问题,报告任何错误或反馈以供讨论。
最后,别忘了 更新到这个 1.16 版本!谢谢!