rapids_export

在 v21.06.00 版本中新增。

生成项目的 -Config.cmake 模块和所有相关信息

rapids_export( (BUILD|INSTALL) <project_name>
    EXPORT_SET <export_set>
    [ GLOBAL_TARGETS <targets...> ]
    [ COMPONENTS <components...> ]
    [ COMPONENTS_EXPORT_SET <component 1 export set, component 2 export set...> ]
    [ VERSION <X.Y.Z> ]
    [ NAMESPACE <name_space> ]
    [ DOCUMENTATION <doc_variable> ]
    [ FINAL_CODE_BLOCK <code_block_variable> ]
    [ LANGUAGES <langs...> ]
    )

rapids_export() 函数允许项目轻松生成完全正确的构建和安装树 Project-Config.cmake 模块,包括对 find_dependency()CPMFindPackage() 的任何必要调用。

注意

rapids_export() 生成的文件是完全独立的,并且不需要消费包使用 rapids-cmake

project_name

项目名称,供消费方使用 find_package 时使用

GLOBAL_TARGETS

明确列出应全局可见于消费项目的所有目标。

COMPONENTS .. versionadded:: v23.04.00

此导出包提供的可选 COMPONENTS 列表。此处列出的名称将是调用 find_package() 的消费方用于启用这些组件的名称。

对于 COMPONENTS 中的每个条目,要求在 COMPONENTS_EXPORT_SET 中具有相同位置的条目。

rapids_export(BUILD example
  EXPORT_SET example-targets
  COMPONENTS A B
  COMPONENTS_EXPORT_SET A-export B-export
  )

需要这样做,以便 rapids_export() 可以正确地为每个组件建立依赖关系和导入目标信息。

COMPONENTS_EXPORT_SET .. versionadded:: v23.04.00

与每个可选 COMPONENT 相关的导出集列表。

COMPONENTS_EXPORT_SET 中的每个条目都与 COMPONENTS 列表中相同位置的组件相关联。

VERSION

明确列出要导出的包的版本。默认情况下,rapids_export() 使用根级别 project 调用指定的版本。如果没有指定版本,或者将 OFF 作为 VERSION 值提供,则不会生成版本兼容性检查。

根据版本字符串,将使用不同的兼容模式。

版本字符串

兼容类型

不执行检查

X

主版本相同

X.Y

次版本相同

X.Y.Z

次版本相同

注意

在为大型项目的子组件或没有导出规则的外部项目生成导出规则时,明确指定版本字符串可能很有用。

NAMESPACE

可选值,用于指定 EXPORT_SET 中的所有目标将放在哪个命名空间中。提供时必须匹配 <name>:: 模式。推荐的命名空间可以是 <project_name>::。如果未提供,则不使用命名空间。

注意: - 使用 BUILD 类型导出时,只有 GLOBAL_TARGETS 将被放入命名空间。 - 命名空间也可以通过使用 EXPORT_NAME 属性为每个目标单独配置。

DOCUMENTATION

可选值,表示保存此配置文件文档的变量。

注意:这需要文档变量而不是内容,以便我们可以处理文档中包含 CMake 代码的情况。

FINAL_CODE_BLOCK

可选值,表示保存将在此配置文件最后一步执行的代码字符串的变量。

注意:这需要代码块变量而不是内容,以便我们可以正确插入 CMake 代码。

LANGUAGES

非默认语言,例如 CUDA,您的包的消费方需要这些语言。这确保所有消费方都能正确设置这些语言。

这是必需的,因为 CMake 的 enable_language 只支持为当前目录范围启用语言,并且不支持从函数内部调用。在此标记语言可以克服这些限制,并使得通过 CPM 包含的包能够启用语言。

关于如何正确使用 rapids_export() 的示例

...

add_library(example STATIC source.cu)
target_compile_features(example PUBLIC $<BUILD_INTERFACE:cuda_std_17>)

rapids_cmake_install_lib_dir(lib_dir)
install(TARGETS example
        DESTINATION ${lib_dir}
        EXPORT example-targets
        )

set(doc_string [=[Provide targets for the example library.]=])

set(code_string [=[ message(STATUS "hi from example-config")]=])

 rapids_export(INSTALL example
    EXPORT_SET example-targets
    GLOBAL_TARGETS example # Need to list all targets from `install(TARGETS`
    NAMESPACE example::
    DOCUMENTATION doc_string
    FINAL_CODE_BLOCK code_string
    )

rapids_export(BUILD example
    EXPORT_SET example-targets
    GLOBAL_TARGETS example # Need to list all targets from `install(TARGETS`
    # CUDA language support is a build detail only, as target_compile_features
    # guards the language behind `BUILD_INTERFACE` generator expression
    LANGUAGES CUDA
    NAMESPACE example::
    DOCUMENTATION doc_string
    FINAL_CODE_BLOCK code_string
    )