makefile 配方的构建时间

Posted

技术标签:

【中文标题】makefile 配方的构建时间【英文标题】:Build time for makefile recipe 【发布时间】:2016-08-24 09:41:26 【问题描述】:

我想计算 makefile 中每个配方花费的时间

SYS_TIME = $(shell date)
SUBDIRS = a b c d

.PHONY = default

default:
    for dir in $(SUBDIRS); \
    do \
       $(eval ST = $(SYS_TIME)) \
       $(MAKE) -C FOLD=$$dir; \
       $(eval ET = $(SYS_TIME))
       echo "time spent  =   $(ST) - $(ET) "
   done; \

结果应该是这样的:

花费时间 = 1:35

花费时间 = 2:23

花费时间 = 10:59

花费时间 = 5:35

第一个表示 1 分 35 秒,其他表示相同

$(shell date)

的其他替代方法

【问题讨论】:

请向我们展示您的作品。还以一个简单的 makefile 为例,指定一个调试构建选项和一个发布构建选项。运行调试构建和之后的发布可能会使发布构建看起来运行得非常快。一个配方可以影响其他配方的构建时间。 旁注:***.com/q/6966877/4153464 这可能就是您要找的。它不会解释您的 makefile,但它可能足够接近 @Work of Artiz 在这种情况下我只有一个食谱。我没有得到的其他构建内容,您可以详细说明一下吗? 重要要知道:Make 将扩展整个配方(存储为单个递归扩展变量)作为制定的第一步将什么传递给外壳。然后它一个接一个地运行扩展的每一行,每一行都在一个单独的 shell 调用中。这样做的结果是你的两个$(eval...)s 都将在扩展时运行,在 shell 开始做任何事情之前。 【参考方案1】:

只需在命令行前加上time,例如:time $(MAKE) -C $$dir

【讨论】:

稍后我会将花费的时间重定向到文件 你能推荐一些替代 A := $(shell date)

以上是关于makefile 配方的构建时间的主要内容,如果未能解决你的问题,请参考以下文章

具有共享相同配方的多个规则的 Makefile

从同一 Makefile 中的配方更改 make 变量并调用另一个规则?

无法制作 raylib,收到 makefile 错误 576:目标“rmodels.o”的配方失败

如何在yocto中编写makefile的配方

如何确保将 Makefile 变量设置为先决条件?

Makefile 将自身添加为目标