cmake/libs/Directory.cmake
Share
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プロジェクトの説明は終わりです。