Laz*_*eus 7 c++ versioning cmake
我在将cmake PROJECT_VERSION_MAJOR变量导出到config.h文件时遇到问题.在我的主要内容CMakeLists.txt我通过调用project()主CMakeLists.txt文件根据cmake文档设置此变量:
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)
Run Code Online (Sandbox Code Playgroud)
通过configure_file()invokation我试图将一些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
Run Code Online (Sandbox Code Playgroud)
cmake ..在我的构建目录中运行命令后config.h创建,但它看起来像这样:
#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
Run Code Online (Sandbox Code Playgroud)
我想这个行为的原因是在cmake文档中关于该configure_file()函数的注意事项:
复制一个文件到一个文件和替代变量值作为引用
@VAR@或${VAR}在输入文件内容.每个变量引用将替换为变量的当前值,如果未定义变量,则替换为空字符串.此外,输入行的形式如下:
#cmakedefine VAR ...将被替换为:
#define VAR ...要么:
/* #undef VAR */取决于是否
VAR在CMake中设置为任何不被 命令视为伪常量的if()值.在”...”对变量名后的线的内容,如果有的话,被处理为以上.表单的输入文件#cmakedefine01 VAR行将替换为任一#define VAR 1或#define VAR 0类似.
问题是,我可以导出PROJECT_VERSION_MAJOR等于零的cmake 变量吗?或者我注定要PROJECT_VERSION在我的代码中解析我的定义?
在应用hank的建议后,新生成的文件如下所示:
#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
Run Code Online (Sandbox Code Playgroud)
我认为在你的情况下你不应该使用#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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |