CMake:从时间戳组件中删除前导零
CMake: Remove leading zero from timestamp components
我正在使用 cmake 的 configure_file()
函数在 C 构建中设置一些版本信息。生成的输出如下所示:
#pragma once
// Time
#define VERSION_HOUR 15
#define VERSION_MINUTE 53
#define VERSION_SECOND 56
我通过 cmake 的 string(TIMESTAMP)
功能获得这些值:
# Time
string(TIMESTAMP hour "%H")
string(TIMESTAMP min "%M")
string(TIMESTAMP sec "%S")
我遇到的问题是 string(TIMESTAMP)
返回的值有前导零。例如,我可以得到这样的结果:
#pragma once
#define VERSION_HOUR 15
#define VERSION_MINUTE 03
#define VERSION_SECOND 06
在这种情况下,代码库的编译将失败,因为代码中的某些部分基本上如下所示:
const build_version_t build_version = {
.hour = VERSION_HOUR,
.minute = VERSION_MINUTE,
.second = VERSION_SECOND
}
其中 .hour
、.minute
和 .second
是 uint8_t
类型的字段。
带前导零的文字被解释为八进制。
从相应的 cmake 变量中去除前导零的 easiest/best 方法是什么?
有很多方法可以解决这个问题。一种方法是使用 math
对其进行评估。例如:
set(hour 09)
math(EXPR hour ${hour})
message(STATUS ">${hour}<")
输出:
-- >9<
(尖括号只是为了表明hour
的最终值中没有其他字符。)
我正在使用 cmake 的 configure_file()
函数在 C 构建中设置一些版本信息。生成的输出如下所示:
#pragma once
// Time
#define VERSION_HOUR 15
#define VERSION_MINUTE 53
#define VERSION_SECOND 56
我通过 cmake 的 string(TIMESTAMP)
功能获得这些值:
# Time
string(TIMESTAMP hour "%H")
string(TIMESTAMP min "%M")
string(TIMESTAMP sec "%S")
我遇到的问题是 string(TIMESTAMP)
返回的值有前导零。例如,我可以得到这样的结果:
#pragma once
#define VERSION_HOUR 15
#define VERSION_MINUTE 03
#define VERSION_SECOND 06
在这种情况下,代码库的编译将失败,因为代码中的某些部分基本上如下所示:
const build_version_t build_version = {
.hour = VERSION_HOUR,
.minute = VERSION_MINUTE,
.second = VERSION_SECOND
}
其中 .hour
、.minute
和 .second
是 uint8_t
类型的字段。
带前导零的文字被解释为八进制。
从相应的 cmake 变量中去除前导零的 easiest/best 方法是什么?
有很多方法可以解决这个问题。一种方法是使用 math
对其进行评估。例如:
set(hour 09)
math(EXPR hour ${hour})
message(STATUS ">${hour}<")
输出:
-- >9<
(尖括号只是为了表明hour
的最终值中没有其他字符。)