add_libraryのメモ

メモ代わりの参考訳

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])

<name> はターゲットの論理名で、プロジェクト内でユニークでなければならない。

  • STATIC は静的ライブラリである。

  • SHARED は実行時に動的にリンクされる。

  • MOULDE は動的にdlopenのような関数を用いてロードされる。プラグインなどで使用される。

ライブラリのタイプを指定しない場合は、 BUILD_SHARED_LIBSON ならば、 SHARED に、 OFFなら STATIC になる。

SHAREDMODULEPOSITION_INDEPENDENT_CODE が自動的に True に設定される。 なお、 STATIC の同設定は CMAKE_POSITION_INDEPENDENT_CODE の設定値で自動的に初期化される。

ビルド結果は、ソースツリーに関連するビルドツリーに出力される。 `LIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORY の2つのプロパティで出力先を制御できる。

OUTPUT_NAME で出力されるファイル名の <name> の部分を変更できる。

EXCLUDE_FROM_ALL を引数として与えると、ALLターゲットから除外できる。

オブジェクトライブラリ

add_library(<name> OBJECT <source1> [<source2> ...])

以下のように他のターゲットとリンクする。以下では other ターゲットに OBJECT 指定してビルドした objlib をリンクしている。

add_library(other $<TARGET_OBJECTS:objlib>)

ライブラリの別名

add_library(<name> ALIAS <target>)