Bil*_*l B 5 automake automated-tests autotools
我们有一个autotools项目,它包含单元测试和集成测试,所有这些都通过'make check'运行.这并不理想,因为一些集成测试需要一段时间,并且具有各种依赖性(数据库等)
我想分离集成测试并为它们分配自己的make目标.这样,单元测试仍然可以经常运行(通过make check),并且可以按照类似的方式根据需要运行集成测试.
是否有直接(或其他)方式添加额外的制作目标?
注意:我可能还应该补充说这是一个大型项目,因此不希望手动编辑/维护每个makefile.如果可能的话,我想做'autotools方式'.
- 更新1 -
我已经尝试过Jon的解决方案,而且距离更近了一步,但并不完全.我还有几个问题:
1)递归 - 我可以在构建树的根目录中修改makefile.am,以及包含测试的任何目录,但似乎应该有一种方法可以在我没有的地方执行此操作更改层次结构中的每个Makefile.am.(毕竟检查目标是这样工作的)
2).PHONY - 我一直在收到有关.PHONY被重新定义的消息.这是可以理解的,因为它是由另一个包(特别是doxygen)设置的.我如何让两人在一起玩得很好?
小智 5
在您的 am 文件中,所有 make 语法都传递到生成的 Makefile 中。因此,如果您想要一个新目标,只需像在 Makefile 中一样创建它,它就会出现在自动生成的 Makefile 中。将以下内容放在 am 文件的底部。
集成测试:先决条件....
运行测试的命令
.PHONY:集成测试
由于没有更多回复,我将用我的解决方案来回答。
我通过完全消除递归来解决递归问题。使用此页面 作为指导,我将整个项目从递归 make 切换为非递归 make。然后,我将非递归检查相关目标(check、check-am、check-TESTS 等)克隆到一组新的集成测试目标中。到目前为止,这种方法效果非常好。
注意:您可能想知道为什么我不直接克隆递归目标。坦白说,我找不到它们。要么我不知道在哪里查找(规则不在生成的 Makefile 中),要么隐式发生了一些事情,而且我对自动工具的理解不够好,无法遵循它。
至于.PHONY被重新定义的问题,除了在进行集成测试时有条件地排除其他定义之外,我还没有找到解决方案。