トップレベルのCMakeLists.txt
Share
トップレベルのCMakeLists.txtの各セクションを設定します。
PreambleセクションでCMakeのバージョン、プロジェクトの設定を行います。
cmake_minimum_required(VERSION cmake_version)
project(CppRestApi VERSION project_persion)
バージョンは一般的にMajor.Minor.Patch形式で指定します。
ctestを行うためにCTest、CTestUseLaunchersモジュールをインクルードします。
include(CTest)
include(CTestUseLaunchers)
@loader_path、$ORIGIN変数を使ってrpathの設定を行います。パッケージの一般的なディレクトリ構造のための設定を行うGNUInstallDirsモジュールをインクルードしてlibsディレクトリへのrpathを指定します。
include(GNUInstallDirs)
set(CMAKE_INSTALL_RPATH base_path libs_path)
以上でPreambleセクションの設定は終わりです。
Project wide setupセクションでプロジェクト全体の設定を行います。
デフォルトで共有ライブラリとしてビルドを行います。
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
依存関係やパッケージインストール設定を行うcmakeファイルのモジュールパスを指定します。モジュールパス設定後、プロジェクトではinclude(DirectoryName.cmake)でcmakeファイルを呼び出しスコープで実行します。
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/libs)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/tests)
C++のバージョン、コンパイラ特有機能の設定、プロジェクトの構成(Debug、Release、Profile)設定を行います。
CMAKE_CONFIGURATION_TYPESはマルチ構成ジェネレーター時の設定です。CMAKE_BUILD_TYPEはシングル構成ジェネレーター時の設定です。
構成毎のコンパイルオプションを設定します。CMAKE_<CONFIG>_POSTFIXを使ってinclude/config/web_config_<CONFIG>.hpp.in、include/config/db_config_<CONFIG>.hpp.inを構成時にbuild/include/config/web_config.hpp、build/include/config/db_config.hppにコピーします。マルチジェネレーターの場合、構成はビルド時に決まります。ジェネレーター式を使ってconfig.hpp.inの内容を構成に合わせた値に指定することができますが、CppRestApiではProfile構成が使用されます。
Dpendenciesセクション以降はサブプロジェクトをadd_subdirectory関数で取り込んでいきます。