返回介绍

如何实施

发布于 2025-05-06 21:45:57 字数 2586 浏览 0 评论 0 收藏

我们将按照以下步骤,在模板头文件中对版本进行注册:

  1. 要跟踪代码版本,我们可以在 CMakeLists.txt 中调用 CMake 的 project 时定义项目版本:
    cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
    project(recipe-04 VERSION 2.0.1 LANGUAGES C)
  2. 然后,基于 version.h.in 生成 version.h :
    configure_file(
      version.h.in
      generated/version.h
      @ONLY
      )
  3. 最后,我们定义了可执行文件,并提供了目标包含路径:
    add_executable(example example.c)
    target_include_directories(example
      PRIVATE
          ${CMAKE_CURRENT_BINARY_DIR}/generated
      )

工作原理

当使用版本参数调用 CMake 的 project 时,CMake 将为项目设置 PROJECT_VERSION_MAJORPROJECT_VERSION_MINORPROJECT_VERSION_PATCH 。此示例中的关键命令是 configure_file ,它接受一个输入文件(本例中是 version.h.in ),通过将 @ 之间的占位符替换成对应的 CMake 变量,生成一个输出文件(本例中是 generate/version.h )。它将 @ [email protected] 替换为 2,以此类推。使用关键字 @ONLY ,我们将 configure_file 限制为只替换 @ [email protected] ,而不修改 ${variables} 。后一种形式在 version.h.in 中没有使用。但是,当使用 CMake 配置 shell 脚本时,会经常出现。

生成的头文件可以包含在示例代码中,可以打印版本信息:

$ mkdir -p build
$ cd build
$ cmake ..
$ cmake --build .
$ ./example
​
This is output from code v2.0.1
Major version number: 2
Minor version number: 0
Hello CMake world!

NOTE : CMake 以 x.y.z 格式给出的版本号,并将变量 PROJECT_VERSION<project-name>_VERSION 设置为给定的值。此外, PROJECT_VERSION_MAJOR ( <project-name>_VERSION_MAJOR ), PROJECT_VERSION_MINOR ( <project-name>_VERSION_MINOR ) PROJECT_VERSION_PATCH ( <project-name>_VERSION_PATCH ) 和 PROJECT_VERSION_TWEAK ( <project-name>_VERSION_TWEAK ),将分别设置为 X , Y , Zt

更多信息

为了确保只有当 CMake 变量被认为是一个真正的常量时,才定义预处理器变量,可以使用 configure_file ,在配置的头文件中使用 #cmakedefin 而不是 #define

根据是否定义了 CMake 变量并将其计算为一个真正的常量, #cmakedefine YOUR_VARIABLE 将被替换为 #define YOUR_VARIABLE … 或者 /* #undef YOUR_VARIABLE */ 。还有 #cmakedefine01 ,将根据变量是否定义,将变量设置为 01

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。