通过 cmake 命令获取 lldb 源码 git tag 信息
最终效果
- 仅修改源码里 CMakeLists.txt,添加获取 tag 的命令,保存到编译目录新建的头文件里。
- 通过字符串操作,提取想要的 tag 名称,比如将 tag 原始名称 v9.0.0-sw1.0.0 改为 sw1.0.0。
llvm 中获取 git 信息的思路
llvm 源码里通过 cmake/modules 目录下 VersionFromVCS.cmake 和 GenerateVersionFromVCS.cmake 两个文件来生成 git 源码仓库信息。
lldb 源码里也是调用了 llvm 这个文件来生成自己的 git 信息,之前已经借助 llvm 实现了 tag 获取,但是这里 tag 信息改变了,从而之前额规则不太适用了,这里重新设计了下实现方式,避免与 llvm 耦合。
- 新建 version.h 文件到编译目录
set(version_h “${CMAKE_CURRENT_BINARY_DIR}/version.h”)
- 添加 git 命令获取 tag 信息,此时 tag 名称为 v9.0.0-sw1.0.0。
execute_process(
COMMAND git describe –tags
WORKING_DIRECTORY ${LLDB_SOURCE_DIR}
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_tag
OUTPUT_STRIP_TRAILING_WHITESPACE)
- 正则匹配 tag 字符串并处理,把 tag 名称改为 sw1.0.0。
string(REGEX MATCHALL “sw.*$” git_tag_new “${git_tag}”)
- 将处理后的 tag 信息追加到 version.h 文件里,内容为:#define LLDB_GIT_TAG “sw1.0.0”
file(APPEND “${version_h}”
“#define LLDB_GIT_TAG "${git_tag_new}"\n”)
message(STATUS “LLDB_GIT_TAG: ${git_tag_new}”)
- 修改 source/lldb.cpp 文件,引入 version.h 头文件,在版本字符串后添加 LLDB_GIT_TAG 宏。
全部修改内容:
1 | diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt |