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

如何在Makefile目标的每行执行前记录时间戳

问题

我有一个包含多步骤的Makefile目标,示例如下:

do-something:
    cat Dockerfile
    ls

我希望在执行每个步骤前输出带时间戳的日志,目前的写法如下,但感觉不够简洁高效,有没有更好的实现方式?

do-something:
    echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') calling step1
    cat Dockerfile
    echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') calling step2
    ls
    echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') Done

解决方案

可以通过定义Makefile宏来复用日志打印逻辑,既减少重复代码,又能保持格式统一:

# 定义带时间戳的日志宏,$1为传入的日志内容
logLine = @date -u +'%d-%m-%Y %H:%M:%S:%N $1'

do-something:
    $(call logLine, calling step1)
    cat Dockerfile
    @date -u +'%d-%m-%Y %H:%M:%S:%N calling step2'  # 也可以直接调用date命令
    ls
    $(call logLine, Done)

说明

  • 用logLine宏封装了时间戳格式和date命令调用,通过$(call)可以快速传入自定义日志内容,避免重复编写相同的时间格式字符串
  • 命令前加@可以阻止Make打印命令本身,只输出日志内容
  • 如果偶尔需要临时打印,也可以直接写@date...的形式,灵活度高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:21