无法导出cmake project_version_major,因为它等于零
Cannot export cmake PROJECT_VERSION_MAJOR because it equals zero
我在将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
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 程序无法启动,因为缺少 libmpc-3.dll
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 无法为 X.radio 创建中等可视化,因为找不到网络节点可视化 - Omnet++
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- C++ 程序不会因为内存而终止
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- 无法使用 openssl 服务器,因为密码已过时...什么的...ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- "this"关键字在C++中的实现限制,因为它与危险但功能示例有关
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 如何读取指针的值,因为这个指针是函数的返回?
- 无法加载 QML 插件:无法保护模块,因为它从未注册过
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- system() 无法运行我的程序,因为空间
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00