Automake:将本地便利行为添加到“make check”

Posted

技术标签:

【中文标题】Automake:将本地便利行为添加到“make check”【英文标题】:Automake: adding local convenience behavior to "make check" 【发布时间】:2016-09-01 16:21:54 【问题描述】:

采用标准项目布局

$(src_topdir)/include
$(src_topdir)/src
$(src_topdir)/tests

除了在$(src_topdir)/src 中运行任何已配置的测试之外,我还想在$(src_topdir)/src 中键入“make check”时运行$(src_topdir)/tests 中的所有测试。

Automake 提供了一个扩展来向 check Makefile 目标添加额外的目标,方法是添加(在 Makefile.am 中)我可以定义的目标 local-check

local-check:
        cd ../tests && $(MAKE) $(AM_MAKEFLAGS) check

虽然这使我可以满意地在$(src_topdir)/src 目录中使用make check,但不幸的是,它中断了从$(src_topdir) 目录对make check 的调用。这是因为来自$(src_topdir) 的调用递归地进入$(src_topdir)/src$(src_topdir)/tests,从而触发$(src_topdir)/tests 中的测试两次。

有没有一种方法可以让我在$(src_topdir)/src 中更改我的Makefile.am,以便本地make check 调用触发所需的额外测试,而来自其余工具的make check 调用不受影响?

【问题讨论】:

【参考方案1】:

在 Automake 中没有办法做到这一点。

一种解决方法是简单地更改目标的名称。也就是说,不要输入make check,而是输入make mycheck(或任何你喜欢的)。那么mycheck规则就很容易写了。

另一个想法是简单地省去子目录 Makefiles。如今,为整棵树设置一个 Makefile 通常会更好。然后这个问题就消失了——或者,如果你真的想要,你可以用这个写一个很小的src/Makefile,它只有一个check 目标。

【讨论】:

谢谢。我得出了或多或少相同的结论。我有一个适用于一个目录的解决方法,但是当其他人完成相同的调用时会失败。为了减少这种影响,我主要是添加从***目录执行所需操作的命令。 (top-clean, top-make, top-check) 基本上向上导航直到 make 文件是 $topdir 的文件,然后发出相应的 make 目标。

以上是关于Automake:将本地便利行为添加到“make check”的主要内容,如果未能解决你的问题,请参考以下文章

automake:编译器选项的顺序阻碍了 make

将源代码添加到现有的 automake 程序

Automake:使用 make dist 删除配置脚本检查

使用 automake 生成条件块

automake

sh 脚本只显示工具的版本,如果它们安装在系统中。 (clang make automake autoconf cmake)