如何实施
我们将按照以下步骤,在模板头文件中对版本进行注册:
- 要跟踪代码版本,我们可以在 CMakeLists.txt 中调用 CMake 的
project时定义项目版本:cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(recipe-04 VERSION 2.0.1 LANGUAGES C)
- 然后,基于
version.h.in生成version.h:configure_file( version.h.in generated/version.h @ONLY )
- 最后,我们定义了可执行文件,并提供了目标包含路径:
add_executable(example example.c) target_include_directories(example PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated )
工作原理
当使用版本参数调用 CMake 的 project 时,CMake 将为项目设置 PROJECT_VERSION_MAJOR 、 PROJECT_VERSION_MINOR 和 PROJECT_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 , Z 和 t 。
更多信息
为了确保只有当 CMake 变量被认为是一个真正的常量时,才定义预处理器变量,可以使用 configure_file ,在配置的头文件中使用 #cmakedefin 而不是 #define 。
根据是否定义了 CMake 变量并将其计算为一个真正的常量, #cmakedefine YOUR_VARIABLE 将被替换为 #define YOUR_VARIABLE … 或者 /* #undef YOUR_VARIABLE */ 。还有 #cmakedefine01 ,将根据变量是否定义,将变量设置为 0 或 1 。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论