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 dist 删除配置脚本检查
sh 脚本只显示工具的版本,如果它们安装在系统中。 (clang make automake autoconf cmake)