Programing/Tool/CMake/Guides/Tutorial のバックアップソース(No.4)

#contents
----
[[CMake Tutorial>https://cmake.org/cmake/help/latest/guide/tutorial/index.html]]の簡易翻訳

*はじめに [#z0b8f822]
本チュートリアルは、一般的なビルドシステムの問題をCMakeで対処するのに役立つガイドを提供します。
本チュートリアルのドキュメントとサンプルコードは、CMakeソースコードの[[Help/guiede/tutorial>https://gitlab.kitware.com/cmake/cmake/-/tree/master/Help/guide/tutorial]]にあります。
サンプルコードは、ステップ毎のサブディレクトリに分割して格納されています。
*Step1.基本 [#p4c44c30]

- 基本プロジェクト
最も基本的な、ソースコードから実行ファイルをビルドするプロジェクトです。
このような単純なプロジェクトの場合、必要なのはたった3行の CMakeLists.txt ファイルのみです。
次のような CMakeLists.txt ファイルをディレクトリに作成します。
#geshi(make,number){{
cmake_minimum_required(VERSION 3.10)

# set the project name
project(Tutorial)

# add the executable
add_executable(Tutorial tutorial.cxx)
}}

** バージョン番号と設定用ヘッダファイルの追加 [#c6e974cf]
- バージョン番号の追加
実行ファイルとプロジェクトにバージョン番号を追加します。
#geshi(make,number){{
cmake_minimum_required(VERSION 3.10)

# set the project name and version
project(Tutorial VERSION 1.0)
}}
- 設定用ヘッダファイルの生成
設定したバージョン番号をソースコードに渡すためのヘッダファイルを生成します。
configure_fileコマンドを使用することで、テンプレートファイル(TutorialConfig.h.in)内にCMakeLists.txtで定義した変数の内容を埋め込んで、ヘッダファイル(TutorialConfig.h)を生成します。
#geshi(make,number){{
configure_file(TutorialConfig.h.in TutorialConfig.h)
}}
- 検索パスの追加
設定用ヘッダファイルはバイナリツリーに書き込まれます。
そのため、ヘッダファイルを #include で検索するためには、パスのリストに追加する必要があります。 
CMakeLists.txt の最後に次の行を追加します。
#geshi(make,number){{
target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           )
}}
- テンプレートファイル
設定用ヘッダファイル(TutorialConfig.h)の元となるテンプレートファイル(TutorialConfig.h.in)を作成します。
#geshi(C++,number){{
// チュートリアル用の設定済みオプション
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
}}
CMakeがこのヘッダーファイルを生成すると、@Tutorial_VERSION_MAJOR@ と @Tutorial_VERSION_MINOR@ が変数値に置き換えられます。
- ソースファイルの変更
tutorial.cxxを変更して、設定用ヘッダーファイル(TutorialConfig.h)をインクルードします。
以下のように実装することで実行可能ファイルの名前とバージョン番号を出力できます。
#geshi(C++,number){{
  if (argc < 2) {
    // report version
    std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
              << Tutorial_VERSION_MINOR << std::endl;
    std::cout << "Usage: " << argv[0] << " number" << std::endl;
    return 1;
  }
}}
** C++規格への対応 [#f17f10bd]
- コードの修正
tutorial.cxx内のatofをstd::stodに置き換えて、C++11規格の機能を追加します。
同時に#include <cstdlib>を削除します。
#geshi(C++,number){{
  const double inputValue = std::stod(argv[1]);
}}
- CMakeLists.txtの修正
C++11規格を使用する場合、CMakeコード上でも明示的に指定する必要があります。
特定のC++規格に対応する最も簡単な方法は、CMAKE_CXX_STANDARD変数を使用する方法です。
このチュートリアルでは、CMakeLists.txtファイルの CMAKE_CXX_STANDARD変数を11に設定し、CMAKE_CXX_STANDARD_REQUIREDをTrueに設定します。
add_executableの呼び出し前にCMAKE_CXX_STANDARD宣言を必ず追加してください。
#geshi(make,number){{
cmake_minimum_required(VERSION 3.10)

# プロジェクト名とバージョンの指定
project(Tutorial VERSION 1.0)

# C++規格の指定
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
}}
** ビルドとテスト [#f3734f53]
cmakeもしくはcmake-guiを実行して、プロジェクトを構成し、選択したビルドツールでビルをします。

- ビルドディレクトリの作成
コマンドから CMakeソースコードの Help/guide/tutorial ディレクトリに移動し、ビルドディレクトリを作成します。
#geshi(bash,number){{
mkdir Step1_build
}}
- CMakeの実行
次に、ビルドディレクトリに移動し、CMake を実行してプロジェクトを構成し、ビルドシステムを生成します。
#geshi(bash,number){{
cd Step1_build
cmake ../Step1
}}
- ビルド
ビルドシステムを呼び出して、実際にプロジェクトをコンパイル/リンクします。
#geshi(bash,number){{
cmake --build .
}}
- 動作確認
最後にビルドしたTutorialコマンドを動作確認しましょう。
#geshi(bash,number){{
Tutorial 4294967296
Tutorial 10
Tutorial
}}