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

如何对Makefile目标做基准测试并解决shell命令提前执行问题

问题根因

你观察到的时间一致是GNU Make的执行逻辑导致的:

  • $(shell ...)是Make的内置函数,会在Make解析阶段(也就是所有recipe实际执行前)就完成求值,因此两个$(shell date)会在解析Makefile的时候同步执行,时间完全相同,之后展开成固定的字符串嵌入到echo命令里,执行echo时自然不会重新获取时间。
解决方案

不要使用Make层面的$(shell)函数,把date命令的执行交给运行recipe的shell进程处理即可,只需将$(shell date)替换为$$(date):

  • Make中连续两个$会转义为字面量的$,最终传递给shell的命令就是echo "$(date) Before test",由shell执行到对应行时才会调用date命令获取当前时间。

修改后的正确Makefile如下:

test:
    @echo "$$(date) Before test"
    sleep 10
    @echo "$$(date) After test"

修改后再次运行,你会看到两次date输出的时间差为10秒,符合基准测试的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:45:09