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