rapids_cmake_write_git_revision_file

新增于版本 v21.10.00。

生成一个 C++ 头文件,其中包含调用项目的 git 版本信息。

rapids_cmake_write_git_revision_file(<target_name> file_path [PREFIX <prefix>])

创建一个名为 target_name 的全局接口目标 (global interface target),该目标包含指向生成头文件的 include 路径以及 git 分支、sha1、版本以及是否存在未提交更改的宏定义。头文件的使用者必须对该目标使用 target_link_libraries,以便在使用该头文件之前生成它。

PREFIX

所有 C++ 宏的前缀。默认情况下,如果未明确指定,它将等同于项目名称(CMake 变量 PROJECT_NAME)。

此信息将记录在以下宏定义中

  • <PREFIX>_GIT_BRANCH 将存储当前的 git 分支名称;否则,当处于 detached HEAD 状态时将存储 HEAD

  • <PREFIX>_GIT_SHA1 如果存在,将存储当前 git 提交的完整 SHA1。

  • <PREFIX>_GIT_IS_DIRTY 如果任何 git 跟踪的文件存在未提交的修改(dirty),则此宏将存在。

  • <PREFIX>_GIT_VERSION 将存储通过运行 git describe –tags –dirty –always 计算出的 <tag>[-<distance>-g<sha1>[-dirty]] 格式。例如,“v21.10.00a-18-g7efb04f-dirty” 表示最新的提交是“7efb04f”但存在未提交的更改(-dirty),并且我们处于标签“v21.10.00a”之后的“18”个提交处。

file_path

绝对路径或相对路径。如果是相对路径,绝对位置将根据 CMAKE_CURRENT_BINARY_DIR 计算。

注意

如果 git 不存在或项目未使用 git,头文件仍将被写入。分支、sha1 和版本宏定义将被设置为 unknown,并且项目不会被视为 dirty。

结果目标

将创建 target_name 目标。使用该生成头文件的库/可执行文件

必须通过 target_link_libraries 使用此目标,以确保正确构建。