Automake生成Makefile时,检查依赖于所有:
check-am: all-am
。
这是什么原因?
我的猜测是,递归构建是必要的,因为不知道哪些测试取决于哪个目标,并且目标必须正确构建,否则测试结果将过时。但是,如果依赖项是已知的,无论是通过编译器的依赖项信息还是通过使用非递归构建,这种行为都很烦人,因为目标是构建的,并不是真正需要的。
Automake生成Makefile时,检查依赖于所有:
。check-am: all-am
这是什么原因?
这里做出的一个基本假设是,当您运行测试时,您希望针对当前代码运行它们。
另一个合理的假设是测试套件的目标是尽可能完整地覆盖项目,或者至少这样做是合理的。
根据这些假设,并且不声称代表 Automake 开发人员的实际设计决策,至少有两个原因可以解释为什么
check-am
将 all-am
作为先决条件是有意义的:
如果您想运行整个测试套件,那么必须构建整个项目 - 既因为这就是您想要测试的内容,又因为如果您有任何构建失败,则该项目不处于合适的状态有待测试。
虽然测试可以构建为程序,但 Automake 对测试的支持预计它们通常会作为脚本实现。当它们是脚本时,没有好的方法来为它们执行自动依赖项生成。 Automake 无法可靠地生成运行每个测试的精确先决条件,但假设测试对项目具有良好的覆盖范围,那么这是一个简单而有效的解决方案,可以使测试套件的执行依赖于整个项目的最新状态。