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.seconduint8_t 类型的字段。 带前导零的文字被解释为八进制。

从相应的 cmake 变量中去除前导零的 easiest/best 方法是什么?

有很多方法可以解决这个问题。一种方法是使用 math 对其进行评估。例如:

set(hour 09)
math(EXPR hour ${hour})
message(STATUS ">${hour}<")

输出:

-- >9<

(尖括号只是为了表明hour的最终值中没有其他字符。)