2016-02-08 6 views
6

私は共有ライブラリを使っていくつかのAppsを使ってプロジェクトをセットアップしていますが、これは共有ライブラリに依存するSUBDIRSプロジェクトを使ってうまく構築されています。QMakeで 'make check'のPATH/LD_LIBRARY_PATHを設定する

TEMPLATE = subdirs 
SUBDIRS = app1 app2 sharedLib 
app1.depends = sharedLib 
app2.depends = sharedLib 

各アプリケーションには、CONFIG += testcaseが設定された多数のテストも含まれています。

これはcheckターゲットを作成します。したがって、すべての単体テストをmake checkを使用してトップレベルの.proから実行できます。

問題は、いくつかのアプリケーションテストではsharedLib内にコードが存在する必要があるため、各プラットフォームライブラリのルックアップルールに従って検出可能である必要があります。

Windowsでは、PATHにsharedLibの場所を設定するオプションがあります.linuxではsharedLibの場所をLD_LIBRARY_PATH(MacのDYLD_LIBRARY_PATH)に追加できます。

一つの解決策は、単にmake checkを実行する前に構築された共有ライブラリの場所を設定することです:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build/sharedDll/ 
make check 

をして、これは動作しますが、それは共有を構築しているビルドスクリプトそのものであるとして、それは少し冗長なようです彼らはで.PRO/PRIファイル内から参照することができsharedLibバイナリの場所へのパス、知っているので、ライブラリ:だから

$$TOP_BUILDDIR/sharedLib/release 

を、目的のプロジェクトファイルの中からPATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATHを設定することがとにかくありmake checkコマンドの

答えて

0

gccを使用している場合は、gccのrpathパラメータを使用できます。

-rpath = DIR
            ランタイムライブラリ検索パスにディレクトリを追加します。これは、ELF実行可能ファイルを共有オブジェクトとリンクするときに使用されます。
         すべての-rpath
           引数は
           が実行時に共有オブジェクトを検索するためにそれらを使用していますランタイムリンカ、に連結して渡されます。

QMAKE_CXXFLAGS + = -rpath =//絶対/パス

あなたはその技術を使用している場合、Qtの5ではLD_LIBRARY_PATH

0

を編集する必要はありません。5、次qmakeの文は、ターゲットcheckためLD_LIBRARY_PATHへのパス$$TOP_BUILDDIR/sharedLib/releaseを付加します:

check.commands = LD_LIBRARY_PATH=$$TOP_BUILDDIR/sharedLib/release:\$$LD_LIBRARY_PATH $$check.commands 

私は、ファイルtestcast.prfqt_functions.prf(特に機能qtAddTargetEnv()qtAddToolEnv())、$$[QT_INSTALL_PREFIX]/mkspecs/featuresに位置両方から、このソリューションのためのインスピレーションを描きました。

関連する問題