ターゲットを与えられたライブラリにリンクします。
target_link_libraries(<target> ]] <item>] ...)
与えられたターゲットをリンクするときに使用するライブラリまたはフラッグを指定する。 <target>
という名前は、add_executable()
や add_library()
などのコマンドでカレントディレクトリに作成されたものでなければならない。 残りの引数には、ライブラリ名やフラグを指定する。
ライブラリ名がプロジェクト内の他のターゲットと一致する場合、ターゲットがリンクする前にリンクされるライブラリが最新であることを確認するために、ビルドシステムに依存性が自動的に追加されます。
debug
、optimized
、general
キーワードは、その直後のライブラリが、対応するビルド構成にのみ使用されることを示します。 debug
キーワードは、Debug 構成に対応します (または、DEBUG_CONFIGURATIONS
グローバル・プロパティが設定されている場合は、そのプロパティで指定された構成に対応します)。 optimized
キーワードは、他のすべての構成に対応します。 general
キーワードはすべての構成に対応し、純粋にオプションです (省略された場合は想定されます)。 このターゲットが別のターゲットにリンクされると、このターゲットにリンクされたライブラリは、別のターゲットのリンク行にも表示されます。 この推移的な「リンク インターフェイス」は、INTERFACE_LINK_LIBRARIES
ターゲット プロパティに格納され、プロパティを直接設定して上書きすることができます。 CMP0022
が NEW
に設定されていない場合、リンクは組み込まれるが、LINK_INTERFACE_LIBRARIES
プロパティで上書きされることがある。 このコマンドの他のシグネチャへの呼び出しは、このシグネチャによって排他的にリンクされたライブラリをプライベートにするプロパティを設定することができます。
<item>
が Mac OX フレームワークのライブラリである場合、フレームワークの Headers
ディレクトリも使用要件として処理されます。
target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <lib> ... ...])
PUBLIC
、PRIVATE
、INTERFACE
キーワードは、1つのコマンドでリンクの依存性とリンクインターフェースの両方を指定するために使用することが可能です。 PRIVATE
に続くライブラリとターゲットはリンクされますが、リンク・インターフェースには含まれません。 2937>
target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <lib>] ...)
LINK_INTERFACE_LIBRARIES
モードでは、ライブラリをリンクに使用せず、INTERFACE_LINK_LIBRARIES
ターゲットプロパティに追加する。 ポリシー CMP0022
が NEW
でない場合、このモードも LINK_INTERFACE_LIBRARIES
とそのパーコンフィギュレーションに相当するものにライブラリを追加します。 代わりに INTERFACE
モードを推奨します。
デバッグビルドに対応するため、debug
で指定されたライブラリはジェネレータ式でラップされます。 ポリシー CMP0022
が NEW
でない場合、ライブラリは LINK_INTERFACE_LIBRARIES_DEBUG
プロパティに追加されます (DEBUG_CONFIGURATIONS
global property が設定されている場合は、そのプロパティにリストされた構成に対応するプロパティに追加されます)。 ポリシー CMP0022
が NEW
でない場合、LINK_INTERFACE_LIBRARIES
プロパティに追加されます。 general
(またはキーワードなし) で指定されたライブラリは、debug
と optimized
の両方に指定されたものとして扱われます。
target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>] ... <lib>] ...])
LINK_PUBLIC
および LINK_PRIVATE
モードは、リンク依存性とリンクインターフェースの両方を一つのコマンドで指定できるよう使用可能。
LINK_PUBLIC
に続くライブラリおよびターゲットはリンクされ、INTERFACE_LINK_LIBRARIES
の一部となります。 policyCMP0022
が NEW
でない場合、それらは 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)
というコードは main
と A B A B
をリンクしています。 通常は1回の繰り返しで十分ですが、病的なオブジェクトファイルやシンボルの配置では、もっと繰り返しが必要になることがあります。 このような場合、最後のtarget_link_libraries
呼び出しでコンポーネントを手動で繰り返すことで対処することができる。
target_link_libraries への引数は、$<...>
の構文の “generator expression” を使用することができます。 ただし、CMP0003
や CMP0004
の OLD 処理ではジェネレータ式は使われないことに注意してください。 ビルドシステムのプロパティの定義については、cmake-buildsystem(7)
マニュアルを参照してください。
コメントを残す