You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在获取编译时间的预处理器宏?__TIMESTAMP__有使用局限

获取编译时刻的预处理器方案

针对你提出的「需要获取编译时刻而非源文件修改时间」的需求,以下是几种可行方案:

1. 直接使用GCC内置的__DATE__和__TIME__宏

这两个是GCC预处理器原生支持的宏,完全满足你的需求:

  • __DATE__:展开为预处理器处理当前源文件的日期字符串(格式如 "Oct 12 2024")
  • __TIME__:展开为预处理器处理当前源文件的时间字符串(格式如 "14:35:22")

核心优势:无论源文件是否修改,只要重新执行编译命令,这两个宏都会自动更新为本次编译的时刻,不会像__TIMESTAMP__那样受文件修改时间限制。

示例代码:

#include <stdio.h>

int main() {
    printf("本次编译时刻:%s %s\n", __DATE__, __TIME__);
    return 0;
}

2. 编译时通过外部参数传递统一构建时间

如果需要为整个项目设置统一的构建时间(而非单个文件的编译时间),可以在编译命令中通过-D参数注入系统生成的时间字符串:

# Linux/macOS环境下用date命令生成格式化时间
gcc -DBUILD_TIME="\"$(date '+%Y-%m-%d %H:%M:%S')\"" main.c -o main

代码中直接使用该宏即可:

#include <stdio.h>

int main() {
    printf("项目统一构建时间:%s\n", BUILD_TIME);
    return 0;
}

3. 借助构建工具自动生成时间头文件

对于CMake、Makefile等构建工具,可以自动生成包含构建时间的头文件,确保整个项目的时间一致性:

CMake实现示例

  1. 创建模板文件build_time.h.in:
#define PROJECT_BUILD_TIME "@CMAKE_BUILD_DATE@ @CMAKE_BUILD_TIME@"
  1. 在CMakeLists.txt中添加配置逻辑:
# 自定义时间格式(UTC时区)
string(TIMESTAMP CMAKE_BUILD_DATE "%Y-%m-%d" UTC)
string(TIMESTAMP CMAKE_BUILD_TIME "%H:%M:%S" UTC)

# 根据模板生成最终头文件
configure_file(
    ${CMAKE_SOURCE_DIR}/build_time.h.in
    ${CMAKE_BINARY_DIR}/build_time.h
    @ONLY
)

# 让编译器能找到生成的头文件
include_directories(${CMAKE_BINARY_DIR})
  1. 代码中引入生成的头文件:
#include <stdio.h>
#include "build_time.h"

int main() {
    printf("项目构建时间:%s\n", PROJECT_BUILD_TIME);
    return 0;
}

内容的提问来源于stack exchange,提问作者rimiha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:01:03