2016-05-02 10 views
2

В моем проекте autotools есть несколько модульных тестов. один из этих тестов (filereader) необходимо прочитать файл (data/test1.bin)Как заставить autotools проверять файлы?

Вот мой макет файловой системы: - libfoo/тесты/filereader.c - libfoo/тесты/данные/test1.bin

и my 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 больше не может найти входной файл.

Это, очевидно, потому, что только исходное дерево содержит входной файл, но не дерево сборки.

Интересно, что такое канонический способ устранить эту проблему?

  • скомпилировать каталог тест-файл в UnitTest (AM_CPPFLAGS+=-DSRCDIR=$(srcdir))
  • проходят квалифицированный входной файл в качестве аргумента командная_строки теста? (например, $(builddir)/filereader $(srcdir)/data/file1.bin)
  • Скопируйте исходный файл из исходного дерева в дерево сборки? (cp $(srcdir)/data/file1.bin $(builddir)/data/file1.bin? Как бы выглядело правильное правило? ??)

ответ

1

Канонически решение было бы определить путь к вашему файлу в unittest, поэтому первый вариант, который вы выложили. Второй вариант также возможен, но для этого требуется использовать сценарий между драйверами.

Я предлагаю избегать третьего, но если вы хотите спуститься по этому маршруту, используйте $(LN_S), а не cp; таким образом вы уменьшаете нагрузку ввода-вывода теста.

+0

, но если полный путь get скомпилирован в unittest, он больше не перемещается :-( –

+1

Сборка не должна быть перемещаемой - в Makefile также выдается путь к ней. Если вы перемещаете свои источники вокруг, вы * должен * воссоздать каталог сборки. –