7

我最近将我的构建系统转换为 automake/autoconf。在我的项目中,我有一些单元测试需要运行它们的目录中的一些输入数据文件。当我运行 make distcheck 并尝试构建 VPATH 时,这些测试失败,因为它们显然不是从输入文件所在的目录运行的。我想知道是否有一些快速解决方法。例如,我能否以某种方式告诉系统不要在 make distcheck 上运行这些测试(但仍然在 make check 上运行它们)?或者在运行测试之前 cd 到文件所在的目录?

4

2 回答 2

8

我遇到了同样的问题并使用了类似于威廉的解决方案。我的 Makefile.am 看起来像这样:

EXTRA_DIST = testdata/test1.dat

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"

然后,在我的单元测试中,我使用 DATADIR 定义:

string path = DATADIR "/testdata/test1.dat"

这适用于make checkmake distcheck

于 2012-08-15T08:23:52.800 回答
5

典型的解决方案是编写测试,以便它们在源目录中查找数据文件。例如,您可以$srcdir在测试中引用,或转换testtest.in并引用@srcdir@.

如果您的测试都在源目录中,您可以通过在 Makefile.am 中设置 TESTS_ENVIRONMENT 来运行该目录中的所有测试:

TESTS_ENVIRONMENT = cd $(srcdir) &&

如果您的某些测试是由 configure 创建的,因此这将失败,因此仅存在于 build 目录中,在这种情况下,您可以选择性地 cd 使用以下内容:

 TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&

尝试像这样使用 TESTS_ENVIRONMENT 充其量是脆弱的,最好编写测试,以便它们在源目录中查找数据文件。

于 2012-07-06T14:31:58.523 回答