cmake/libs/Directory.cmake

Admin私のストア

cmake/libs/Directory.cmakeにソースプログラムのコンパイル方法を指定します。

target_include_directories関数はターゲット毎にインクルードパスを指定します。

target_link_libraries関数はターゲット毎にリンクするライブラリを指定します。

リンクの方法はPRIVATE、PUBLIC、INTERFACEを指定できます。INTERFACEキーワードの使い方は限定的なため先に説明します。

INTERFACEキーワードは2つの使い方があります。一つ目はheaderファイルからターゲットを作成する時に使用します。include_directories関数があるため、一つ目の使い方は限定的です。

add_library(target INTERFACE)

target_include_directories(target INTERFACE include_dir)

もう一つINTERFACEキーワードの利用方法は複数のライブラリのインターフェースとして利用する方法です。

add_library(target INTERFACE)

target_link_libraries(target INTERFACE a b c ...)

INTERFACEキーワードはヘッダーのみのターゲットを作成したり、ライブラリセットのターゲットを作成するために使用します。

PRIVATEとPUBLICキーワードの違いについて説明します。target_link_librariesではターゲットをリンクするターゲットを消費ターゲットと呼びます。消費ターゲットがリンクするターゲットのインターフェースを提供しない場合、PRIVATEキーワードを指定できます。消費ターゲットがリンクターゲットにある定義を提供する場合はPUBLICキーワードを指定します。

適切にリンクキーワードを指定することで共有ライブラリを作成し、プロジェクトの変数でリンクを切り替えられるようになります。

ターゲットの作成ができたらターゲットをコンポーネントにインストールします。コンポーネントはpackaging/CMakeLists.txtでパッケージングの仕方を指定します。

install(TARGETS targets RUNTIME COMPONENT CppRestApi_Runtime ...)

cmake/tests/DirectoryTest.cmakeも同様です。

これでCppRestAPIのCMakeプロジェクトの説明は終わりです。

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。