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
)