2016-05-02 11 views
2

私のautotoolsプロジェクトには、いくつかのユニットテストがあります。これらのテストの 1(filereader)は、ファイル(data/test1.binautotoolsテストでファイルを読み取る方法

ここに私のファイルシステムのレイアウトだが読み取る必要がある: - 今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の外観は?)

答えて

1

標準的には、ファイルへのパスをunittestに定義することになります。つまり、最初に配置したオプションです。 2番目の方法も可能ですが、ドライバスクリプトを使用する必要があります。

私は3番目を避けることをお勧めしますが、そのルートを下りたい場合は、cpではなく$(LN_S)を使用してください。このようにして、テストのI/O負荷を軽減します。

+0

しかし、フルパスがユニットテストにコンパイルされた場合、それはもはやリロケータブルではありません:-( –

+1

ビルドは再配置可能ではないと思われます - Makefileもそこへのパスとともに出力されます。 * buildディレクトリを再作成する必要があります。 –

関連する問題