rapids_cpm_find
添加于版本 v21.06.00。
允许项目通过 CPM 查找或构建任意项目,并内置这些依赖项的跟踪,以实现正确的导出支持。
rapids_cpm_find(<PackageName> <version>
[COMPONENTS <components...>]
[GLOBAL_TARGETS <targets...>]
[BUILD_EXPORT_SET <export-name>]
[INSTALL_EXPORT_SET <export-name>]
<CPM_ARGS>
all normal CPM options
)
生成一个 CPM FindPackage 调用,并将其与列出的构建和安装导出集关联,以实现正确的导出生成。
由于 CMake 目标的可见性在本地构建的目标和导入的目标之间有所不同,rapids_cpm_find()
会将导入的目标提升为全局目标,以便用户获得一致性。在 GLOBAL_TARGET 中列出项目使用的所有目标。
注意
需要在使用前调用 rapids_cpm_init()
。
PackageName
要查找的包的名称。
version
您希望 CPM 查找的包的版本。
COMPONENTS
添加于版本 v22.10.00。
一个必需组件列表,在执行本地搜索时,这些组件必须找到才能使该包被认为是有效的。
GLOBAL_TARGETS
应将此包中的哪些目标设为全局。此信息将传播到任何相关的导出集。
在版本 v21.10.00 中更改: 如果在调用
rapids_cpm_find()
时 GLOBAL_TARGET 中列出的任何目标已存在,则不会执行任何 CPM 调用。这样做是为了以下原因:消除了调用代码进行条件检查的需要。
允许 BUILD_EXPORT_SET 和 INSTALL_EXPORT_SET 跟踪在目标已通过非 CPM 方式引入时正确进行。
BUILD_EXPORT_SET
记录一个
CPMFindPackage(<PackageName> ...)
调用需要作为我们的构建目录导出集的一部分发生。INSTALL_EXPORT_SET
记录一个
find_dependency(<PackageName> ...)
调用需要作为我们的安装目录导出集的一部分发生。BUILD_PATCH_ONLY
即使存在补丁命令,也不要求下载包。这是为了启用仅影响构建过程而不影响运行时功能的补丁。
CPM_ARGS
必需的占位符,用于在需要传递给
CPMFindPackage()
的任何额外参数之前提供。注意
除非指定了
BUILD_PATCH_ONLY
,否则PATCH_COMMAND
将始终触发使用CPMAddPackage()
而非CPMFindPackage()
。即使补丁命令为空也是如此。
结果变量
<PackageName>_SOURCE_DIR
设置为 <PackageName> 的源码目录路径。<PackageName>_BINARY_DIR
设置为 <PackageName> 的构建目录路径。<PackageName>_ADDED
如果 <PackageName> 之前未添加过,则设置为真值。
注意
将导出集添加到 rapids_cpm_find()
对于构建和安装有不同的行为。构建导出相应的 CPM 调用,因为我们认为其他 CPM 包不会生成正确的构建目录配置模块。而安装导出 find_dependency 调用,因为我们期望项目有一个有效的安装设置。
如果需要不同的行为,您需要使用 rapids_export_package()
或 rapids_export_cpm()
。
如果设置了 CPM_<PackageName>_SOURCE
,我们将使用 CPMAddPackage()
而非 CPMFindPackage()
。CPMAddPackage()
始终在指定的 CPM_<PackageName>_SOURCE
位置添加包,并且不会首先尝试通过 find_package()
查找它。
示例
关于如何使用 rapids_cpm_find()
包含常用项目的示例。
# fmt
rapids_cpm_find(fmt 8.0.1
GLOBAL_TARGETS fmt::fmt
CPM_ARGS
GITHUB_REPOSITORY fmtlib/fmt
GIT_TAG 8.0.1
GIT_SHALLOW TRUE
)
# google benchmark, no GIT_TAG required since it uses `v<Version>` tags
rapids_cpm_find(benchmark 1.5.2
CPM_ARGS
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_SHALLOW TRUE
OPTIONS "BENCHMARK_ENABLE_TESTING OFF"
"BENCHMARK_ENABLE_INSTALL OFF"
)
覆盖
rapids_cpm_package_override()
命令提供了一种方式,让项目可以覆盖任何 rapids_cpm_find()
、rapids_cpm_*、CPM 和 FetchContent()
包的默认值。
默认情况下,当为一个项目提供覆盖时,不会对该项目进行本地搜索。这样做是为了确保使用了请求的修改版本。