Conan 1.50:新增 CMakeToolchain.cache_variables,改进组件的 XCodeDeps 支持,修复 CMake、MSBuild、XCode 中的错误,许多移植,细微更改,新工具,朝着提供 2.0 兼容的配方语法和新的 Conan 2.0 beta 文档方向发展
我们很高兴地宣布 Conan 1.50 已经发布,它带来了一些重要的新功能和错误修复。我们添加了 CMakeToolchain.cache_variables
以便通过构建助手中的 -D
参数应用它们。此外,我们改进了组件的 XCodeDeps 支持。最后,我们继续修复问题并移植工具,以便配方语法与 Conan 2.0 兼容。
新的 CMakeToolchain.cache_variables
从这个版本开始,CMakeToolchain 生成器 提供了一个属性来定义 CMake 缓存变量。这些变量将存储在 CMakePresets.json 文件中(位于 configurePreset 中的 cacheVariables 中),并在使用 Conan CMake 构建助手 调用 cmake.configure
时使用 -D
参数应用。让我们看一个例子
...
class MylibConan(ConanFile):
...
def generate(self):
tc = CMakeToolchain(self)
tc.cache_variables["foo"] = True
tc.cache_variables["foo2"] = False
tc.cache_variables["var"] = "23"
tc.generate()
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
当调用 cmake.configure()
时,它将以下参数传递给 CMake
cmake -G ... -DCMAKE_TOOLCHAIN_FILE="/pathto/conan_toolchain.cmake" ... -Dfoo="ON" -Dfoo2="OFF" -Dvar="23" ...
如您所见,配方中的布尔值会自动转换为 CMake 中的 ON
和 OFF
值。
XCodeDeps 的改进
自从我们在 Conan 1.42 中引入 XcodeDeps 以来,我们一直在逐步改进此生成器。从 Conan 1.49 开始,此生成器为具有组件的包创建单独的 .xcconfig 文件,现在此版本添加了一些内部优化,使其更有效地使用此类包。组件支持使得可以选择特定的组件而不是添加整个包。例如,如果您直接依赖于一个具有组件的包,例如 boost,但您只想使用 boost filesystem 和 chrono 组件,您可以在配方的 generate()
方法中轻松做到这一点。让我们看一个例子
import textwrap
from conan import ConanFile
from conan.tools.apple import XcodeDeps
from conan.tools.files import save
class MyappConan(ConanFile):
name = "myapp"
version = "1.0"
...
def generate(self):
deps = XcodeDeps(self)
deps.generate()
# overwrite the generated conandeps.xcconfig
# with just the components
# we want to use instead the whole package
component_deps = textwrap.dedent("""
#include "conan_boost_filesystem.xcconfig"
#include "conan_boost_chrono.xcconfig"
""")
save(self, "conandeps.xcconfig", component_deps)
提供 2.0 兼容配方语法的进展
我们继续改进与 Conan 2.0 的语法兼容性,一些相关的更改包括:
- 创建
self.info.clear()
作为self.info.header_only()
的别名,它将在 Conan 2.0 中消失。 - 允许选项具有
["ANY"]
作为列表 - 将所有与 C++ 标准相关的工具 从 2.0 移植到 1.50
有关如何迁移您的配方以使其与 Conan 2.0 兼容的更详细信息,请查看 迁移指南。
Conan 2.0 文档的进展
我们想谈谈 Conan 2.0。如您所知,第一个 Conan 2.0 beta 版已经发布。您可以使用 pip 安装它
$ pip install conan --pre
我们最近努力完成了 新版 Conan 的文档。虽然 2.0 的文档仍处于“草稿”状态,但某些部分实际上已经完成。Conan 1.X 和 Conan 2.0 文档的结构有一些差异。让我们看看 Conan 2.0 文档中最相关的部分
教程部分
这个 新部分 对 Conan 最重要的功能进行了实用的动手介绍。目的是逐步学习这些功能。本节分为三个子部分
-
使用包:这部分已经完成,展示了如何使用 Conan 来管理依赖项构建您的项目,从一个使用 Zlib 库的简单项目开始。在本节中,您将学习诸如 使用 tool_requires、什么是 Conan 设置和选项、如何使用 conanfile.py 使用,以及如何使用双配置文件方法 交叉编译 您的应用程序。
-
创建包:本节已完成一半,展示了如何使用 Conan 配方创建 Conan 包。我们首先 创建一个基本的 Conan 配方 来打包一个简单的 C++ 库,您可以使用 conan new 命令对其进行脚手架,然后我们开始向其中添加功能,解释 Conan 配方的不同方法是如何工作的。主题包括 如何从外部存储库检索源代码 并应用补丁、自定义工具链、二进制兼容性如何工作以及如何打包 Conan 包的文件。教程的最后一部分是关于不同类型的 Conan 包的特性,如 仅限头文件的包、预构建二进制文件的包 或 tool requires 包。
-
版本控制和持续集成:本节尚未编写。我们将在此处提供一些在您的 CI 中使用 Conan 的“最佳实践”。
示例部分
本节收集了一些 Conan 功能的相关用例示例,例如:
- 创建 自定义 Conan 命令
- 使用 CMakePresets 构建您的项目。
- 用于 修补源代码 的最佳实践
- 如何 交叉构建 Android 以及 在 Android Studio 中集成 Conan。
参考部分
本节 将收集您可以在 Conan 配方中使用的公共类和方法的参考。参考的一个重要部分是记录 Conan API 的部分。尽管此 API 的开发仍在进行中并且尚未稳定,但我们计划为 Conan 2.0 记录整个 Conan API,以便您可以在项目中使用它。一个相关的示例是 创建 Conan 自定义命令 来清理 Conan 缓存并使用此 API 的一些方法。
除了上面列出的项目外,还有一些您可能希望了解的次要错误修复。如果是这样,请参阅 更改日志 以获取完整列表。
我们希望您喜欢此版本,并期待您的 反馈。