ターゲットを与えられたライブラリにリンクします。

target_link_libraries(<target> ]] <item>] ...)

与えられたターゲットをリンクするときに使用するライブラリまたはフラッグを指定する。 <target> という名前は、add_executable()add_library() などのコマンドでカレントディレクトリに作成されたものでなければならない。 残りの引数には、ライブラリ名やフラグを指定する。

ライブラリ名がプロジェクト内の他のターゲットと一致する場合、ターゲットがリンクする前にリンクされるライブラリが最新であることを確認するために、ビルドシステムに依存性が自動的に追加されます。

debugoptimizedgeneral キーワードは、その直後のライブラリが、対応するビルド構成にのみ使用されることを示します。 debug キーワードは、Debug 構成に対応します (または、DEBUG_CONFIGURATIONS グローバル・プロパティが設定されている場合は、そのプロパティで指定された構成に対応します)。 optimized キーワードは、他のすべての構成に対応します。 general キーワードはすべての構成に対応し、純粋にオプションです (省略された場合は想定されます)。 このターゲットが別のターゲットにリンクされると、このターゲットにリンクされたライブラリは、別のターゲットのリンク行にも表示されます。 この推移的な「リンク インターフェイス」は、INTERFACE_LINK_LIBRARIES ターゲット プロパティに格納され、プロパティを直接設定して上書きすることができます。 CMP0022NEW に設定されていない場合、リンクは組み込まれるが、LINK_INTERFACE_LIBRARIES プロパティで上書きされることがある。 このコマンドの他のシグネチャへの呼び出しは、このシグネチャによって排他的にリンクされたライブラリをプライベートにするプロパティを設定することができます。

<item> が Mac OX フレームワークのライブラリである場合、フレームワークの Headers ディレクトリも使用要件として処理されます。

target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <lib> ... ...])

PUBLICPRIVATEINTERFACE キーワードは、1つのコマンドでリンクの依存性とリンクインターフェースの両方を指定するために使用することが可能です。 PRIVATEに続くライブラリとターゲットはリンクされますが、リンク・インターフェースには含まれません。 2937>

target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <lib>] ...)

LINK_INTERFACE_LIBRARIESモードでは、ライブラリをリンクに使用せず、INTERFACE_LINK_LIBRARIES ターゲットプロパティに追加する。 ポリシー CMP0022NEW でない場合、このモードも LINK_INTERFACE_LIBRARIES とそのパーコンフィギュレーションに相当するものにライブラリを追加します。 代わりに INTERFACE モードを推奨します。

デバッグビルドに対応するため、debug で指定されたライブラリはジェネレータ式でラップされます。 ポリシー CMP0022NEW でない場合、ライブラリは LINK_INTERFACE_LIBRARIES_DEBUG プロパティに追加されます (DEBUG_CONFIGURATIONS global property が設定されている場合は、そのプロパティにリストされた構成に対応するプロパティに追加されます)。 ポリシー CMP0022NEW でない場合、LINK_INTERFACE_LIBRARIES プロパティに追加されます。 general (またはキーワードなし) で指定されたライブラリは、debugoptimized の両方に指定されたものとして扱われます。

target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>] ... <lib>] ...])

LINK_PUBLIC および LINK_PRIVATE モードは、リンク依存性とリンクインターフェースの両方を一つのコマンドで指定できるよう使用可能。

LINK_PUBLICに続くライブラリおよびターゲットはリンクされ、INTERFACE_LINK_LIBRARIESの一部となります。 policyCMP0022NEW でない場合、それらは LINK_INTERFACE_LIBRARIES の一部として扱われます。 LINK_PRIVATE に続くライブラリとターゲットはリンクされますが、INTERFACE_LINK_LIBRARIES (または LINK_INTERFACE_LIBRARIES) の一部にはなりません。

ライブラリ依存グラフは通常非循環 (DAG) ですが、相互依存の STATIC ライブラリの場合、CMake はグラフにサイクル (強く接続されたコンポーネント) を含ませることが可能です。 例えば、

add_library(A STATIC a.c)add_library(B STATIC b.c)target_link_libraries(A B)target_link_libraries(B A)add_executable(main main.c)target_link_libraries(main A)

というコードは mainA B A B をリンクしています。 通常は1回の繰り返しで十分ですが、病的なオブジェクトファイルやシンボルの配置では、もっと繰り返しが必要になることがあります。 このような場合、最後のtarget_link_libraries呼び出しでコンポーネントを手動で繰り返すことで対処することができる。

target_link_libraries への引数は、$<...> の構文の “generator expression” を使用することができます。 ただし、CMP0003CMP0004 の OLD 処理ではジェネレータ式は使われないことに注意してください。 ビルドシステムのプロパティの定義については、cmake-buildsystem(7) マニュアルを参照してください。