5

我们有一个 autotools 项目,它混合了单元测试和集成测试,所有这些都通过“make check”运行。这并不理想,因为一些集成测试需要一段时间,并且有各种依赖项(数据库等)

我想分离集成测试并为它们分配自己的 make 目标。这样,仍然可以经常运行单元测试(通过 make check),并且可以根据需要以类似的方式运行集成测试。

是否有一种直接(或其他)方式来添加额外的 make 目标?

注意:我可能还应该补充一点,这是一个大型项目,因此手动编辑/维护每个 makefile 是不可取的。如果可能的话,我想用“自动工具方式”来做。

-- 更新 1 --

我已经尝试过Jon的解决方案,它更接近了一步,但并不完全在那里。我还有几个问题:

1)递归 - 我可以修改构建树根目录中的 makefile.am 以及包含测试的任何目录,但似乎应该有一种方法可以在我没有的地方做到这一点更改层次结构中的每个 Makefile.am。(毕竟检查目标是这样工作的)

2) .PHONY - 我不断收到关于 .PHONY 被重新定义的消息。这是可以理解的,因为它是由另一个包(特别是 doxygen)设置的。怎样才能让两个人一起玩好呢?

4

2 回答 2

5

在您的 am 文件中,所有 make 语法都被传递到生成的 Makefile 中。因此,如果您想要一个新目标,只需像在 Makefile 中一样创建它,它就会出现在自动生成的 Makefile 中。将以下内容放在您的 am 文件的底部。

集成测试:先决条件....
        运行测试的命令

.PHONY:集成测试
于 2009-09-30T19:51:07.600 回答
0

由于没有更多的回复,我将用我的解决方案来回答。

我通过完全消除递归解决了递归问题。使用此页面 作为指导,我将整个项目从递归 make 切换到非递归 make。然后,我将非递归检查相关目标(检查、检查上午、检查测试等)克隆到一组新的集成测试目标中。到目前为止,这非常有效。

注意:您可能想知道为什么我不只是克隆递归目标。坦率地说,我找不到他们。要么我不知道去哪里看(规则不在生成的 Makefile 中),要么隐含地发生了一些事情,而且我对自动工具的理解还不够好,无法遵循它。

至于 .PHONY 被重新定义的问题,除了在进行集成测试时有条件地排除其他定义之外,我还没有找到解决方案。

于 2009-10-08T22:20:02.500 回答