标准项目布局
$(src_topdir)/include
$(src_topdir)/src
$(src_topdir)/tests
我想在$(src_topdir)/src
中输入"make check"时运行$(src_topdir)/tests
中的所有测试,以及在$(src_topdir)/src
中运行任何配置的测试。
Automake提供了一个扩展,通过添加(在Makefile.am中)目标local-check
(我可以将其定义为
check
Makefile目标添加额外的目标。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
。