2

./tests/Makefile.am大規模なプロジェクトでは、を呼び出すときにいくつかのテストを実行するように設定しましたmake check。このファイルglobal_wrapper.cにはセットアップ/内訳コードが含まれており、いくつかのサブディレクトリに実装されているテスト関数を呼び出します。

TESTS = global_test

check_PROGRAMS = global_test

global_test_SOURCES = global_wrapper.c foo/foo_test.c bar/bar_test.c

よく働く。ただし、テストには時間がかかるため、オプションで単一のサブディレクトリからのみテストを実行できるようにしたいと思います。これが私が最初にやった方法です。

サブディレクトリを追加しました:

SUBDIRS = foo bar

サブディレクトリに、ローカルラッパーとMakefile.am'sを追加しました。

TESTS = foo_test

check_PROGRAMS = foo_test

# the foo_test.c here is of course the same as in the global Makefile.am
foo_test_SOURCES = foo_wrapper.c foo_test.c

make checkこれもうまく機能します。サブディレクトリを呼び出すとfoo、fooテストのみが実行されます。

ただし、ここで呼び出すmake check./testsすべてのテストが2回実行されます。一度global_test、そしてローカルテストプログラムを通して一度。

SUBDIRSグローバルでステートメントを省略するMakefile.amと、サブディレクトリmakefilesはビルドされません。TESTSローカルから省略した場合Makefile.ammake checkローカルディレクトリに対しては何もしません。

私はautomakeにあまり詳しくありませんが、このジレンマを解決する方法があると確信しています。ここの誰かが私にヒントを与えることができますか?

4

3 に答える 3

4

テストを分割します。tests/Makefile.am で次のことを行います。

テスト = foo_test bar_test

foo_test bar_test を適切にビルドし、次のようなものを使用します

foo_test_SOURCES = foo/foo_wrapper.c foo/foo_test.c
bar_test_SOURCES = bar/bar_wrapper.c bar/bar_test.c

ここで、未加工の 'make check' を実行すると、両方のテストが実行されます。1 つのテストだけを実行したい場合は、'make check TESTS=foo_test' または 'make check TESTS=bar_test' で実行でき、適切なテストだけが実行されます。通常、Makefile.am は TESTS でデフォルトで実行されるすべてのテストをリストし、ユーザーはメイク時に別のテストを選択します。当然のことながら、テストを頻繁に実行している場合は、シェル セッションで「TESTS=foo_test をエクスポート」してから、「make check」と入力するだけでかまいません。

于 2010-02-03T06:31:36.187 に答える
1

checkトップレベルのルールを上書きして、環境変数を定義できると思います。

check:
        DISABLE_SUBTESTS=1 make check-recursive

次にDISABLE_SUBTESTS、サブディレクトリでテストして、実際にテストを実行するかどうかを決定します。

make check(個人的には、このように生成されたルールを上書きするのではなく、テストの出力を隠すことによって、既存のフレームワークで作業するように手配したいと思います。)

于 2010-01-29T07:15:27.700 に答える
1

サブディレクトリで既に実行されているテストを「global_test」から削除できませんか? (単に 2 回実行されないようにするためです。)

于 2010-01-28T10:04:13.360 に答える