孵化中的特性¶
本节专门介绍正在开发中、寻求用户测试和反馈的新功能。它们通常隐藏在特定标志后,以便在此测试阶段进行明确选择性启用。它们需要最新的 Conan 版本(有时建议从 develop2
源代码分支运行),并明确设置这些标志。
新的 CMakeConfigDeps 生成器¶
此生成器旨在替代当前的 CMakeDeps
生成器,它包含了多个待修复的错误和改进,这些在现有生成器中很难实现,以免造成破坏。
创建真实的 SHARED/STATIC/INTERFACE IMPORTED 目标,不再有人工接口目标。
CONAN_LIB::
和其他类似目标不再存在。为目标定义 IMPORTED_CONFIGURATIONS。
依赖项的 CONFIG 定义与依赖项的
Release/Debug/etc
build_type
匹配,不再使用消费者自身的配置。为库目标定义 IMPORTED_LOCATION 和 IMPORTED_IMPLIB。
基于配方中的
languages
和cpp_info/component
languages
属性定义 LINK_LANGUAGES。所有这些都允许更好地传播链接要求和可见性,避免了 Linux 中传递性共享库的一些链接错误。
更好地定义同一包内部组件之间以及与其他包之间的
requires
关系。使用
tool_requires
依赖项时,不再需要任何build_context_activated
或build_context_suffix
。定义
cpp_info/component.exe
信息(也应包括.location
定义),以定义可运行的 EXECUTABLE 目标。来自
requires
的可执行文件也可用于非交叉构建场景。当存在针对相同依赖项的tool_requires
时,这些可执行文件将具有优先权。创建一个新的
conan_cmakedeps_paths.cmake
文件,其中包含<pkg>_DIR
路径的定义,用于直接查找依赖项。该文件还计划用于cmake-conan
,以扩展其使用范围并避免当前的一些限制,因为 CMake 驱动的安装无法在后期注入工具链。(Conan 2.14 新增)通过
cpp_info.frameworks
更好地管理系统 OSX Framework。(Conan 2.14 新增)定义
cpp_info/component.package_framework
信息(也应包括.location
定义,例如os.path.join(self.package_folder, "MyFramework.framework", "MyFramework")
),以定义要链接的自定义 OSX Framework 库。
注意
此生成器仅用于生成 config.cmake
配置文件,它不会生成 Find*.cmake
查找模块,也不计划支持此功能。为此请使用 CMakeDeps
生成器。
除了 CppInfo 中已定义的字段外,cpp_info
或 cpp_info.components
中可以定义的新字段有
# EXPERIMENTAL FIELDS, used exclusively by new CMakeConfigDeps (-c tools.cmake.cmakedeps:new)
self.cpp_info.type # The type of this artifact "shared-library", "static-library", etc (same as package_type)
self.cpp_info.location # full location (path and filename with extension) of the artifact or the Apple Framework library one
self.cpp_info.link_location # Location of the import library for Windows .lib associated to a dll
self.cpp_info.languages # same as "languages" attribute, it can be "C", "C++"
self.cpp_info.exe # Definition of an executable artifact
self.cpp_info.package_framework # Definition of an Apple Framework (new since Conan 2.14)
self.cpp_info.sources # List of paths to source files in the package (for packages that provide source code to consumers)
这些字段将从其他 cpp_info
和 components
定义中自动推导,例如 libs
或 libdirs
字段,但自动推导可能存在局限性。明确定义它们将阻止自动推导并使用配方提供的值。
使用以下方式声明目标的源文件:
self.cpp_info.sources = ["src/mylib.cpp", "src/other.cpp"]
这允许包向消费者提供源代码作为依赖项。路径应相对于包文件夹。源文件将作为 INTERFACE_SOURCES 属性添加到 CMake 库(或组件)目标,并且链接此目标的消费者在构建自己的目标时将编译这些源文件。
此功能通过 -c tools.cmake.cmakedeps:new=will_break_next
配置启用。will_break_next
的值将在后续版本中更改,以强调此功能不适合测试以外的用途。只需启用此配置并强制构建使用 CMakeDeps
的包,即可触发新生成器的使用。
这个新生成器也可在 conanfile
文件中使用,方法是:
[generators]
CMakeConfigDeps
class Pkg(ConanFile):
generators = "CMakeConfigDeps"
或者
from conan import ConanFile
from conan.tools.cmake import CMakeConfigDeps
class TestConan(ConanFile):
def generate(self):
deps = CMakeConfigDeps(self)
deps.generate()
对于此配方中 CMakeConfigDeps
的使用,-c tools.cmake.cmakedeps:new=will_break_next
仍然是必需的,如果未启用该配置,这些配方将会失败。也可以定义 -c tools.cmake.cmakedeps:new=recipe_will_break
来专门启用 CMakeConfigDeps
生成器的使用,但不会自动将现有的 CMakeDeps
替换为 CMakeConfigDeps
。
请注意,即使对于明确的 CMakeConfigDeps
生成器语法,此功能仍处于“孵化”阶段,此配方随时可能被破坏或移除。
如有任何反馈,请在 https://github.com/conan-io/conan/issues 提交新工单。这些反馈对于稳定此功能并使其脱离孵化阶段非常重要,因此即使它运行良好且您未发现任何问题,报告积极反馈也十分有益。
工作区¶
已移至 工作区
工作区文件语法¶
已移至 工作区文件
工作区命令¶
已移至 conan workspace
工作区整体构建¶
已移至 整体构建
如有任何反馈,请在 https://github.com/conan-io/conan/issues 提交新工单。