我最近将我的构建系统转换为 automake/autoconf。在我的项目中,我有一些单元测试需要运行它们的目录中的一些输入数据文件。当我运行 make distcheck 并尝试构建 VPATH 时,这些测试失败,因为它们显然不是从输入文件所在的目录运行的。我想知道是否有一些快速解决方法。例如,我能否以某种方式告诉系统不要在 make distcheck 上运行这些测试(但仍然在 make check 上运行它们)?或者在运行测试之前 cd 到文件所在的目录?
问问题
1263 次
2 回答
8
我遇到了同样的问题并使用了类似于威廉的解决方案。我的 Makefile.am 看起来像这样:
EXTRA_DIST = testdata/test1.dat
AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"
然后,在我的单元测试中,我使用 DATADIR 定义:
string path = DATADIR "/testdata/test1.dat"
这适用于make check
和make distcheck
。
于 2012-08-15T08:23:52.800 回答
5
典型的解决方案是编写测试,以便它们在源目录中查找数据文件。例如,您可以$srcdir
在测试中引用,或转换test
为test.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 回答