2011-11-22 7 views
1

チェックスクリプトを実行する前にautomakeにライブラリの1つをインストールするにはどうしたらいいですか?make checkの前にautomakeインストールターゲット

プロジェクトでは、動的にロードするライブラリの1つ(dlopenを呼び出して)の模擬テストライブラリを作成します。問題は、ロードする必要のある他のライブラリがまだ数多く存在するため(このmakefileで直接コンパイルされていない他のコンポーネントによってインストールされる)、テスト用のライブラリパスをオーバーライドできないことです。

チェックスクリプトを実行する前にライブラリをインストールするだけで大​​変な作業を省くことができます。私はそれを別のメークファイルに入れて、それを最初に呼び出さなければならない場合、問題はありません。基本的には、正しいことをするにはmake checkを実行するだけです。

+0

この動作によって、 'make check'は間違ったことが起こります。あなたのパッケージの 'make check'は、ほとんどすべての' make check 'とは異なる動作をします。 http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets: "プログラムがビルドされているがインストールされていないときに動作するように、自己テストを書くべきです。" –

+0

この製品では不可能です。ステージングは​​いくつかの依存プロジェクトを結合することです。 –

答えて

0

私は公式/正式な方法を見つけることができませんが、以下が動作するようです。 checkに新しい依存関係を追加し、install librariesターゲットを使用しますが、どのライブラリがインストールされているかを上書きします。例:

check_dummy: lib_LTLIBRARIES = libdummy.la 
check_dummy: install-libLTLIBRARIES 
check: check_dummy 

このGNUは具体的に考えています。

4

make checkターゲットはインストール前にパッケージをテストすることになっています。 Automakeはそれを回避する手段を提供していません。この考え方は、make checkが失敗した場合、パッケージをまったくインストールしないことになります。 (あなたがmake check中にインストールするには、いくつかの方法であなたのルールをハック場合も、あなたはおそらくmake distcheckを中断します。)

前にライブラリをインストールし、ローカルライブラリを使用する通常の方法は、あなたのテストの間にLD_LIBRARY_PATHの値に.:を付加することです。 libtoolを使用してローカルライブラリを構築し、それらのライブラリにリンクすると、これらの詳細情報がすべて処理されます。ビルドツリーの実行ファイルlibtoolの出力は、これらの変数を設定するスクリプトですライブラリ。

もう1つの解決方法は、インストール後にテストを実行する場合は、make checkではなくmake installcheckを使用しないことです。 make installcheckは、ユーザーがmake installを実行した後にのみ実行されると予想されます。独自のinstallcheck-localルールを作成する必要があります。

+0

最終的なパッケージとして "make install"は使用しません。我々はそれを使用して、インストール可能な別のパッケージを準備する。 'libtool'は、バージョン依存性の異なる複数のautomakeプロジェクトとグローバルライブラリがある場合にも動作しません。 –

+0

同様の理由から、バージョンに関しては、LD_LIBRARY_PATHを使用してこれらのライブラリをロードすることはできません。パススコープが限られている必要があります(現時点では1つしかサポートしていませんが、 –