使用来自其他定义的部分定义字符串(非字符串)

时间:2011-08-09 01:56:07

标签: c++ string c-preprocessor

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

#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

并且,这导致错误:预期')'在数字常量之前

有没有办法让编译时的VERSION_STRING看起来像“1.2.3”?

1 个答案:

答案 0 :(得分:5)

使用弹弓进行弦乐化应该可以解决问题:

#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"相同。