如何使用 automake 启用安静构建?

Posted

技术标签:

【中文标题】如何使用 automake 启用安静构建?【英文标题】:How to enable quiet build using automake? 【发布时间】:2013-07-02 09:10:58 【问题描述】:

想象一下 autoconf 生成的以下目标和命令:

.c.lo:
    $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
    $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo

我正在 Makefile.am 中寻找一种方法来操作该命令,我知道该命令是由 autoconf 生成的,但我不知道它是什么。理论上是这样的:

if BUILD_QUIETLY
    Q=@
endif

.c.lo:
     $(Q)$(autoconf-command-for-c-lo)

或类似的东西(这类似于 Linux 内核的构建输出):

quiet_cmd_cc = CC     $@
      cmd_cc = $(autoconf-command-for-c-o)

.c.o:
    $(call cmd,cc)

其中cmd 是一个执行cmd_$1 并根据变量打印quiet_cmd_$1cmd_$1 的函数。

我在互联网上查找了这个,但大多数网站都在谈论 autoconf 的基础知识。这里似乎也没有任何与此相关的问题。

这可能吗?

【问题讨论】:

autoconf 不会创建 Make 规则。 automake 确实如此。我建议重新标记。 – 另外,您是否尝试过自动制作的silent-rules 选项? 另请参阅flameeyes.eu/autotools-mythbuster/automake/silent.html(特别是第 3.2 节“自定义静默规则”,如果 silent-rules 不足以满足您的需求)。 @chirlu,非常感谢您的指点!我会试一试,然后告诉你。 @chirlu,这很好用。请把它写成答案,以便我接受。 【参考方案1】:

根据chirlu's comment,automake 可以选择生成安静的输出构建。

This page 有必要的说明。简而言之,将以下内容放入configure.ac

AM_SILENT_RULES([yes])

要禁用它,请执行以下操作:

make V=0

配置后,或者:

./configure --enable-silent-rules

关于配置。

【讨论】:

【参考方案2】:

您始终可以将输出通过管道传输到 /dev/null:

./configure 2>&1 >/dev/null
make 2>&1 >/dev/null

【讨论】:

这不是因为没有收到来自make 的任何反馈。这是为了让它输出一些易于理解的东西。

以上是关于如何使用 automake 启用安静构建?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 autoconf/automake 中使用协议缓冲区?

如果 Python 可用,则选择性地启用测试程序 - automake

如何在 KDevelop 中为基于 automake 的项目添加自定义构建步骤?

如何设置 automake 和 autoconf 以有条件地构建程序(测试或其他)

如何从 automake/libtool 库中获取符号列表?

如何将 automake 文件写入递归构建子目录?