无法导出cmake project_version_major,因为它等于零

Cannot export cmake PROJECT_VERSION_MAJOR because it equals zero

本文关键字:major 因为 等于零 version cmake project      更新时间:2023-10-16

我在将PROJECT_VERSION_MAJOR变量导出到config.h文件时遇到困难。在我的主CMakeLists.txt中,我是根据CMAKE文档设置此变量,通过在Main CMakeLists.txt文件中调用project()

cmake_minimum_required(VERSION 3.2.2)
cmake_policy(SET CMP0048 NEW)
set(PROJECT "SampleName")
project(${PROJECT}
    VERSION "0.0.0")
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)

通过 configure_file(),我正在尝试将一些CMAKE变量导出到config.h标头文件。请在我的config.h.cmake.file上查看:

#ifndef CONFIG_H
#define CONFIG_H
#cmakedefine PROJECT "@PROJECT@"
#cmakedefine PROJECT_VERSION "@PROJECT_VERSION@"
#cmakedefine PROJECT_VERSION_MAJOR "@PROJECT_VERSION_MAJOR@"
#cmakedefine PROJECT_VERSION_MINOR "@PROJECT_VERSION_MINOR@"
#cmakedefine PROJECT_VERSION_PATCH "@PROJECT_VERSION_PATCH@"
#endif

在我的build Directory config.h中运行cmake ..命令后,看起来像这样:

#ifndef CONFIG_H
#define CONFIG_H
#define PROJECT "SampleName"
#define PROJECT_VERSION "0.0.0"
/* #undef PROJECT_VERSION_MAJOR */
/* #undef PROJECT_VERSION_MINOR */
/* #undef PROJECT_VERSION_PATCH */
#endif

我猜这种行为的原因是configure_file()功能的CMake文档中的注释:

将文件复制到文件并替换变量 输入文件内容中引用为@VAR@${VAR}的值。每个 可变参考将被替换为当前值 变量或空字符串,如果未定义变量。 此外,表格的输入线:

#cmakedefine VAR ..

将替换为以下任一:

#define VAR ...

或:

/* #undef VAR */

取决于是否将VAR设置为任何未考虑的值 if()命令的false常数。线上的”...”内容 在变量名称(如果有)之后,如上所述处理。输入文件 #cmakedefine01 VAR表格的线将被任于 #define VAR 1#define VAR 0类似。

问题是,我可以导出等于零的CMAKE PROJECT_VERSION_MAJOR变量吗?还是我注定要在代码中解析PROJECT_VERSION定义?

应用了汉克的建议后,新生成的文件如下所示:

#ifndef CONFIG_H
#define CONFIG_H
#define PROJECT "SampleName"
#define PROJECT_VERSION "0.0.0"
#define PROJECT_VERSION_MAJOR "0"
#define PROJECT_VERSION_MINOR "0"
#define PROJECT_VERSION_PATCH "0"
#endif

我认为在您的情况下,您不应使用#cmakedefine指令。改用简单的#define

#ifndef CONFIG_H
#define CONFIG_H
#define PROJECT "@PROJECT@"
#define PROJECT_VERSION "@PROJECT_VERSION@"
#define PROJECT_VERSION_MAJOR "@PROJECT_VERSION_MAJOR@"
#define PROJECT_VERSION_MINOR "@PROJECT_VERSION_MINOR@"
#define PROJECT_VERSION_PATCH "@PROJECT_VERSION_PATCH@"
#endif
相关文章: