製品について

cmake/libs/Directory.cmake

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も同様です。...

cmake/libs/Directory.cmake

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も同様です。...

packaging/CMakeLists.txt

パッケージングモジュールをインクルードする前にいくつかの変数を設定します。 CPACK_PACAGE_<変数>でパッケージの名前、ベンダー、バージョン等のメタ情報を設定します。CPACK_RESOURCE_FILE_<txt>でパッケージインストール時に表示するtxtファイルを指定します。Welcom.txt、License.txt、Readme.txtを設定します。 CPACK_GENERATORでプラットフォーム毎のインストーラーを設定します。 各設定が完了したらCPackモジュールをインクルードします。 include(CPack) パッケージングするターゲットのコンポーネントを設定します。CppRestApiではDirectory.cmakeでターゲットをコンポーネント化しています。CppRestApiでパッケージに追加しているコンポーネントはCppRestAPI_RuntimeとCppRestAPI_Developmentです。プロジェクトのターゲットをコンポーネント化する前に一般的なCPackの設定を行っておきます。 cpack_add_component(CppRestApi_Runtime ...) cpack_add_component(CppRestApi_Development ...) cpack_add_component(CppRestApi_Samples ...) cpack_add_component(CppRestApi_ApiDocs ...) cpack_add_component_group(CppRestApi_SDK ...) cpack_add_component_group(CppRestApi_SDK ...)

packaging/CMakeLists.txt

パッケージングモジュールをインクルードする前にいくつかの変数を設定します。 CPACK_PACAGE_<変数>でパッケージの名前、ベンダー、バージョン等のメタ情報を設定します。CPACK_RESOURCE_FILE_<txt>でパッケージインストール時に表示するtxtファイルを指定します。Welcom.txt、License.txt、Readme.txtを設定します。 CPACK_GENERATORでプラットフォーム毎のインストーラーを設定します。 各設定が完了したらCPackモジュールをインクルードします。 include(CPack) パッケージングするターゲットのコンポーネントを設定します。CppRestApiではDirectory.cmakeでターゲットをコンポーネント化しています。CppRestApiでパッケージに追加しているコンポーネントはCppRestAPI_RuntimeとCppRestAPI_Developmentです。プロジェクトのターゲットをコンポーネント化する前に一般的なCPackの設定を行っておきます。 cpack_add_component(CppRestApi_Runtime ...) cpack_add_component(CppRestApi_Development ...) cpack_add_component(CppRestApi_Samples ...) cpack_add_component(CppRestApi_ApiDocs ...) cpack_add_component_group(CppRestApi_SDK ...) cpack_add_component_group(CppRestApi_SDK ...)

tests/CMakeLists.txt

ソースプログラムの依存関係の設定はsrc/CMakeLists.txtで説明したのと同じです。 cmakeファイルはDatabaseTest.cmake、WebTest.cmakeをインクルードします。 include(DatabaseTest) include(WebTest) テストを追加していきます。 add_test(NAME name COMMAND test_target ...) 

tests/CMakeLists.txt

ソースプログラムの依存関係の設定はsrc/CMakeLists.txtで説明したのと同じです。 cmakeファイルはDatabaseTest.cmake、WebTest.cmakeをインクルードします。 include(DatabaseTest) include(WebTest) テストを追加していきます。 add_test(NAME name COMMAND test_target ...) 

src/CMakeLists.txt

src/CMakeLists.txtではソースプログラムの依存関係を設定します。 CppRestAPIではプロジェクトのヘッダーパスとmysql-connector-cppのヘッダー、ライブラリパスを設定します。 include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/build/include) include_directories(/usr/local/mysql/connector-c++-9.0.0/include) link_directories(/usr/local/mysql/connector-c++-9.0.0/lib64) cmake/libs/Director.cmakeファイルをインクルードしてターゲットの依存関係を設定します。 include(Database) include(Web)

src/CMakeLists.txt

src/CMakeLists.txtではソースプログラムの依存関係を設定します。 CppRestAPIではプロジェクトのヘッダーパスとmysql-connector-cppのヘッダー、ライブラリパスを設定します。 include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/build/include) include_directories(/usr/local/mysql/connector-c++-9.0.0/include) link_directories(/usr/local/mysql/connector-c++-9.0.0/lib64) cmake/libs/Director.cmakeファイルをインクルードしてターゲットの依存関係を設定します。 include(Database) include(Web)

include/CMakefile.txt

includeディレクトリにはプロジェクトのヘッダファイルを保存します。構成毎に変更するconfigはinclude/config/service_config_<CONFIG>.hpp.inです。 configure_file関数でinclude/config/service_config_<CONFIG>.hpp.inをbuild/include/config/service_config.hppに保存します。

include/CMakefile.txt

includeディレクトリにはプロジェクトのヘッダファイルを保存します。構成毎に変更するconfigはinclude/config/service_config_<CONFIG>.hpp.inです。 configure_file関数でinclude/config/service_config_<CONFIG>.hpp.inをbuild/include/config/service_config.hppに保存します。

dependencies/CMakeLists.txt

依存関係ファイル、パッケージを探します。 CppRestAPIではinclude_directories関数とlink_directories関数でインクルードパスとライブラリパスを設定します。

dependencies/CMakeLists.txt

依存関係ファイル、パッケージを探します。 CppRestAPIではinclude_directories関数とlink_directories関数でインクルードパスとライブラリパスを設定します。