2017-06-20 3 views
0

Android用QtCreator/w Qt 5.6を使用して大きなプロジェクト(〜40ライブラリと1実行ファイル)をコンパイルしています。 QtCreatorは "mingw492_32 \ bin \ mingw32-make.exe"を使用してビルドを操作します。mingw32-make `-j`オプションが壊れていますか?

デフォルトのオプションでコンパイルすると、すべてのプロジェクトが正常にコンパイルされます。

QtCreatorプロジェクト設定内で-j4または-j8~mingw32-make.exeコマンドを追加すると、ビルドが高速になりますが、ランダムに失敗します。ある時点で、ライブラリBAとリンクしていますが、Aのコンパイルがまだ完了していないので、Bをリンクしようとしていますので、cannot open ..../libA.soと報告しています。

なお:

  • ABリンクは
  • Bが表示されますBの.PROファイルにLIBS += -l$$OUT_PWD/../../lib/A/libA.soによって管理されているという事実(SUBDIRS += A.pro B.pro
トップレベル.PROファイルで A
+1

makeは、残念ながら、並列ビルドを行うときに依存関係を処理することができません。つまり、まだ構築されていないものに依存するものを構築しようとする可能性があります。 –

+0

@Someprogrammerdude:しかし、QtCreatorはMakeを呼び出すものですが、それをサポートしてはいけませんか? – jpo38

+0

QtCreatorはデフォルトでフラグを設定しないので、QtCreatorによって作成されたmakefileが並列ビルドをうまく処理するように設定されていない可能性があります。 –

答えて

1

Qmake project dependencies (linked libraries)によれば、依存関係は.proファイルで明示的に指定する必要があります。

は、だから私は(SUBDIRS += A.pro B.pro後)私のトップレベル.PROファイルに追加:

CONFIG += ordered 
B.depends += A 

アンスもPRE_TARGETDEPS += $$OUT_PWD/../../lib/A/libA.soB.so

をこれらの変更により、-j4オプションを使用して、ビルドは明らかに動作し、それが分割します私のプロジェクトのコンパイル時間は3!

関連する問題