返回介绍

6.4 记录项目版本信息以便报告

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

NOTE : 此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-6/recipe-04 中找到,其中包含一个 C 和 Fortran 例子。该示例在 CMake 3.5 版(或更高版本) 中是有效的,并且已经在 GNU/Linux、macOS 和 Windows 上进行过测试。

代码版本很重要,不仅是为了可重复性,还为了记录 API 功能或简化支持请求和 bug 报告。源代码通常处于某种版本控制之下,例如:可以使用 Git 标记附加额外版本号(参见 https://semver.org )。然而,不仅需要对源代码进行版本控制,而且可执行文件还需要记录项目版本,以便将其打印到代码输出或用户界面上。

本例中,将在 CMake 源文件中定义版本号。我们的目标是在配置项目时将程序版本记录到头文件中。然后,生成的头文件可以包含在代码的正确位置和时间,以便将代码版本打印到输出文件或屏幕上。

准备工作

将使用以下 C 文件( example.c ) 打印版本信息:

#include "version.h"
​
#include <stdio.h>
​
int main() {
  printf("This is output from code %s\n", PROJECT_VERSION);
  printf("Major version number: %i\n", PROJECT_VERSION_MAJOR);
  printf("Minor version number: %i\n", PROJECT_VERSION_MINOR);
​
  printf("Hello CMake world!\n");
}

这里,假设 PROJECT_VERSION_MAJORPROJECT_VERSION_MINORPROJECT_VERSION 是在 version.h 中定义的。目标是从以下模板中生成 version.h.in :

#pragma once
​
#define PROJECT_VERSION_MAJOR @ [email protected] 
#define PROJECT_VERSION_MINOR @ [email protected] 
#define PROJECT_VERSION_PATCH @ [email protected] 
​
#define PROJECT_VERSION " [email protected] [email protected]"

这里使用预处理器定义,也可以使用字符串或整数常量来提高类型安全性(稍后我们将对此进行演示)。从 CMake 的角度来看,这两种方法是相同的。

发布评论

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