2012-07-04 4 views
6

私は最近ビルドシステムをautomake/autoconfに変換しました。私のプロジェクトでは、実行されている場所からディレクトリにいくつかの入力データファイルが必要な単体テストがいくつかあります。私がmake distcheckを実行してVPATHビルドを試みると、入力ファイルがあるディレクトリから明らかに実行されないので、これらのテストは失敗します。私はこのためのいくつかの迅速な修正があるかどうか疑問に思っていた。たとえば、私は何らかの理由でシステムにmakecheckcheckでこれらのテストを実行しないように伝えることはできますか?または、テストを実行する前にファイルが存在するディレクトリにcdしますか?distcheckを行い、入力ファイルを必要とするテスト

答えて

4

一般的な解決方法は、データファイルのソースディレクトリを調べるようにテストを書き込むことです。たとえば、テストで$srcdirを参照するか、testtest.inに変換し、@[email protected]を参照してください。

あなたのテストは、すべてのソースディレクトリにある場合、あなたはMakefile.amにTESTS_ENVIRONMENTを設定することにより、そのディレクトリ内のすべてのテストを実行することができます。

TESTS_ENVIRONMENT = cd $(srcdir) && 

あなたのテストのいくつかはconfigureが作成された場合、これは失敗します。

TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } && 

これはせいぜい脆弱であり、そしてそれは、彼らがするようにテストを書くのがベストだろうようTESTS_ENVIRONMENTを使用しようとすると:ので、あなたは選択のようなものを収録したCDができ、その場合には、ビルドディレクトリにのみ生きますソースの一言で見るデータファイル用のctory。

+0

私のテストはsrc/some/pathにあり、データファイルは同じディレクトリにあります。 TESTS_ENVIRONMENT = cd $(srcdir)&& トリックが試行されましたが、テスト実行可能ファイルが見つからないため動作しませんでした。 VPATHビルドでは、テストが実行されているディレクトリへの書き込み権限がないため、必要なデータファイルをカレントディレクトリにコピーすることもできません。 –

+0

@Martinでは、ソースディレクトリへの書き込み権限はありませんが、ビルドディレクトリへの書き込み権限はあります。どのようにファイルをコピーしていますか?単に 'EXTRA_DIST = datafile'をtest.inのMakefile.amと' cp $ {srcdir}/datafile .'に追加するだけです。ただし、テストがソースディレクトリから実行されている場合は、書き込み権限のためコピーしようとすると失敗します。私は、ビルドディレクトリから実行されるいくつかのテストと、ソースディレクトリから実行されるいくつかのテストがあると思います。 ( '* .in'という名前のテストは(おそらく)ビルドディレクトリから実行されますが、他のテストはソースディレクトリから実行されます) –

+0

これは私が探していたものとまったく同じように見えましたが、これはAutomake 1.15、残念なことに:残念ながら:これはソースディレクトリ(既に悪い)に '* .log'と' * .trs'ファイルを作成しますが、ビルドディレクトリでそれらを探していますが、もちろん見つからないそれらはそこに(致命的です)。 –

7

私は同じ問題を抱えていて、ウィリアムズと同様の解決法を使用しました。

string path = DATADIR "/testdata/test1.dat" 

これはmake checkmake distcheckで動作します:

EXTRA_DIST = testdata/test1.dat 

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\" 

その後、私のユニットテストでは、私はDATADIRは定義を使用します。私のMakefile.amは次のようになります。

関連する問題