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

Automake: adding local convenience behavior to "make check"

使用

的标准项目布局
$(src_topdir)/include
$(src_topdir)/src
$(src_topdir)/tests

我想 运行 在 $(src_topdir)/src 中键入 "make check" 时 $(src_topdir)/tests 中的所有测试,此外 运行 在 $(src_topdir)/src.

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 调用时触发所需的额外测试其余工具不受影响?

在 Automake 中无法执行此操作。

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

另一个想法是简单地放弃子目录 Makefiles。现在,对整棵树使用一个 Makefile 通常会更好。然后这个问题就消失了——或者,如果你真的想要,你可以写一个只有一个 check 目标的小 src/Makefile