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