#define VERSION_A 0 #define VERSION_B 0 #define VERSION_C 0 #define VERSION_D 0 //You don't have to touch the following #define xstr(x) str(x) #define str(x) #x //Yes, double levels is required. See #define VERSIONSTR "" \ xstr(VERSION_A) "." xstr(VERSION_B) "." xstr(VERSION_C) "." xstr(VERSION_D)