定义一个字符串,其中的部分来自其他定义(非字符串)

Define a string with parts coming from other defines(non strings)

本文关键字:定义 字符串 其他 一个      更新时间:2023-10-16

我试图创建一个版本字符串,使用时将其视为字符*。我正在使用

#define VERSION_MAJOR @cmakeproject_VERSION_MAJOR@
#define VERSION_MINOR @cmakeproject_VERSION_MINOR@
#define VERSION_PATCH @cmakeproject_VERSION_PATCH@
#define VERSION_STRING "" VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH

在cmake配置之后,它看起来像

#define VERSION_MAJOR 1
#define VERSION_MINOR 2
#define VERSION_PATCH 3
#define VERSION_STRING "" VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH

据我所知,编译时的VERSION_STRING最终看起来像

"" 1 "." 2 "." 3

并且,这会导致错误:expected ') '在数值常量

之前

是否有办法使VERSION_STRING在编译时看起来像"1.2.3"?

stringization with slingshot应该可以做到:

#define QU(x) #x
#define QUH(x) QU(x)
#define VERSION_STRING QUH(VERSION_MAJOR) "." QUH(VERSION_MINOR) "." QUH(VERSION_PATCH)

将展开为"1" "." "2" "." "3",与"1.2.3"相同