Определить строку с частями из других определений (не строк) - PullRequest
3 голосов
/ 09 августа 2011

Я пытаюсь создать строку версии, которая при использовании рассматривается как символ *. Я сейчас использую

#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 Ответ

5 голосов
/ 09 августа 2011

Стрификация с рогаткой должна помочь:

#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".

...