私のautotoolsプロジェクトには、いくつかのユニットテストがあります。これらのテストの 1(filereader
)は、ファイル(data/test1.bin
)autotoolsテストでファイルを読み取る方法
ここに私のファイルシステムのレイアウトだが読み取る必要がある: - 今libfoo /テスト/ filereader.c - 今libfoo /テスト/データ/ 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)
)unittestのにテストファイルのディレクトリをコンパイルし、テストにCMDLINE引数として適格入力ファイルを渡しますか? (例:$(builddir)/filereader $(srcdir)/data/file1.bin
) - 入力ファイルをソースツリーからビルドツリーにコピーしますか? (
cp $(srcdir)/data/file1.bin $(builddir)/data/file1.bin
?適切なmake-ruleの外観は?)
しかし、フルパスがユニットテストにコンパイルされた場合、それはもはやリロケータブルではありません:-( –
ビルドは再配置可能ではないと思われます - Makefileもそこへのパスとともに出力されます。 * buildディレクトリを再作成する必要があります。 –