【问题标题】:CMake: Remove leading zero from timestamp componentsCMake:从时间戳组件中删除前导零
【发布时间】:2021-10-27 14:05:19
【问题描述】:

我正在使用 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 变量中去除前导零的最简单/最佳方法是什么?

【问题讨论】:

  • sooo string(REGEX REPLACE .... ?

标签: cmake


【解决方案1】:

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

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

输出:

-- >9<

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

【讨论】:

  • 哦,这比我使用的正则表达式解决方法要好得多...非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
相关资源
最近更新 更多