我的autotools项目有几个单元测试。
其中一个测试(filereader
)需要读取文件(data/test1.bin
)
这是我的文件系统布局: - libfoo / tests / filereader.c - libfoo / tests / data / test1.bin
和我的libfoo / tests / Makefile.am:
AUTOMAKE_OPTIONS = foreign
AM_CPPFLAGS = -I$(top_srcdir)/foo
LDADD = $(top_builddir)/src/libfoo.la
EXTRA_DIST = data/file1.bin
TESTS = filereader
check_PROGRAMS= filereader
filereader_SOURCES = filereader.c
这很有效,只要我在树中构建。
但是,当运行测试套件外树(例如make distcheck
)时,filereader
测试无法再找到输入文件。
这显然是因为只有源树包含输入文件,而不包含构建树。
我想知道解决这个问题的规范方法是什么?
AM_CPPFLAGS+=-DSRCDIR=$(srcdir)
)$(builddir)/filereader $(srcdir)/data/file1.bin
)cp $(srcdir)/data/file1.bin $(builddir)/data/file1.bin
?一个合适的制造规则怎么样?)答案 0 :(得分:1)
通常,解决方案是将文件的路径定义为unittest,这是您布置的第一个选项。第二个也是可能的,但它需要使用中间驱动程序脚本。
我建议避开第三个,但是如果你想沿着这条路走,请使用$(LN_S)
而不是cp
;这样可以减少测试的I / O负载。
答案 1 :(得分:0)
有一种方法可以通过autoconf来实现。从netcdf-c configure.ac:
##
# Some files need to exist in build directories
# that do not correspond to their source directory, or
# the test program makes an assumption about where files
# live. AC_CONFIG_LINKS provides a mechanism to link/copy files
# if an out-of-source build is happening.
##
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat1.nc:nc_test4/ref_hdf5_compat1.nc])
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat2.nc:nc_test4/ref_hdf5_compat2.nc])
AC_CONFIG_LINKS([nc_test4/ref_hdf5_compat3.nc:nc_test4/ref_hdf5_compat3.nc])
AC_CONFIG_LINKS([nc_test4/ref_chunked.hdf4:nc_test4/ref_chunked.hdf4])
AC_CONFIG_LINKS([nc_test4/ref_contiguous.hdf4:nc_test4/ref_contiguous.hdf4])