conan.tools.CppInfo

CppInfo 类表示给定包的基本 C++ 使用信息,例如 includedirslibdirs、库名称等。 它是包的使用者为了能够找到头文件并正确链接库而需要的信息。

package_info() 中的 self.cpp_info 对象是一个 CppInfo 对象,因此在大多数情况下,无需显式实例化它,并根据 package_info() 部分 中的说明使用它就足够了。

本节描述了 CppInfo 的其他高级用例。

在自定义生成器中聚合信息

警告

此功能处于实验阶段,可能会发生重大更改。 有关更多信息,请参阅 Conan 稳定性 部分。

某些生成器(例如内置的 NMakeDeps)包含等效于此代码的内容,该代码将所有依赖项中的所有信息折叠到一个单独的 CppInfo 对象中,该对象聚合了所有信息

from conan.tools import CppInfo

...

def generate(self):
    aggregated_cpp_info = CppInfo(self)
    deps = self.dependencies.host.topological_sort
    deps = [dep for dep in reversed(deps.values())]
    for dep in deps:
        # We don't want independent components management, so we collapse
        # the "dep" components into one CppInfo called "dep_cppinfo"
        dep_cppinfo = dep.cpp_info.aggregated_components()
        # Then we merge and aggregate this dependency "dep" into the final result
        aggregated_cpp_info.merge(dep_cppinfo)

    aggregated_cpp_info.includedirs  # All include dirs from all deps, all components
    aggregated_cpp_info.libs  # All library names from all deps, all components
    aggregated_cpp_info.system_libs # All system-libs from all deps
    ....
    # Creates a file with this information that the build system will use

这种聚合在构建系统无法轻松使用独立的依赖项或组件的情况下可能很有用。 例如,NMakeAutotools 提供依赖项信息的机制将通过 LIBSCXXFLAGS 和类似变量。 这些变量是全局的,因此传递所有依赖项的所有信息是唯一可能性。

公共文档化接口(除了 package_info() 中 定义的接口)是

  • CppInfo(conanfile):构造函数。 接收 conanfile 作为参数,通常为 self

  • aggregated_components():返回一个新的 CppInfo 对象,该对象是所有组件聚合的结果

  • get_sorted_components():获取包的有序组件,优先考虑在同一包中依赖项较少的组件。 返回一个 OrderedDict,其中包含格式为 {component_name: component} 的排序组件。

  • merge(other_cppinfo: CppInfo):修改当前 CppInfo 对象,使用参数 other_cppinfo 的信息更新它,允许聚合来自多个依赖项的信息。