トップレベルのCMakeLists.txt

Admin私のストア

トップレベルの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関数で取り込んでいきます。

ブログに戻る

コメントを残す

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