file - link_private - CMake: lib 用に構築されたオブジェクト ファイルを別の lib ターゲットに再利用する



exclude_from_all cmake (2)

CMake 2.8.8では、 OBJECTライブラリ型を使用してこれを行うことができます。 mloksot's答えを参照してください。 以前の状況では、各ターゲットには独自のディレクトリがあり、CMakeはすべてのターゲットに対してすべての依存オブジェクトを作成していました。 これは、1つのソースファイルを異なるCFLAGS複数回使用できる場合をCFLAGSます。 (デフォルトでは、CMakeはここのautomakeよりも慎重です:automakeは、ターゲットが異なるCFLAGS (そしておそらくはCPPFLAGS )でビルドされている場合のみ、オブジェクトファイルの再利用を止めます。

https://src-bin.com

私は私のプロジェクトをCMakeに移そうとしているのですが、同時にコンパイルプロセスの最適化をしています。

ここでは取引があります:

  • 私はいくつかのサブディレクトリを持っていますが、それぞれが静的ライブラリにコンパイルされていなければなりません。
  • 私は、すべてのオブジェクトファイルを各サブディレクトリから別のより大きな、完全な静的ライブラリに集めたいと考えています。

これは次のようになります。

.
libBig.a  # made from object from subdir1 and subdir2
subdir1/
   src/
   libSubdir1.a
subdir2/
   src/
   libSubdir2.a

今日、私はすべてのサブディレクトリCMakeLists.txtが独自のソースファイルを追加するグローバル変数を使用することができました。 私は大きなライブラリの "ソース"入力としてこの変数を使用します:

# the big library depends on all the source files
# ${all_src} is automatically filled with each subdir's cpp file
get_property( BigLib_src GLOBAL PROPERTY all_src)
add_library( Big STATIC ${BigLib_src}) # recompiles all the sources

さて、これはうまくいくわけではありませんが、 すべてのソースファイルが2回コンパイルされます.1回はサブディレクトリライブラリ、もう1回は大きなライブラリです。

CMakeは既にそれを構築していることを忘れているようです。

subdirライブラリを保持しなければならず、 arは2つの静的ライブラリをマージできません。

あなたはそれをする方法を知っていますか?






cmake