Programing/Tool/CMake/Guides/Tutorial のバックアップ(No.3)



CMake Tutorialの簡易翻訳

はじめに

Step1.基本

  • 基本プロジェクト
    最も基本的な、ソースコードから実行ファイルをビルドするプロジェクトです。
    このような単純なプロジェクトの場合、必要なのはたった3行の CMakeLists.txt ファイルのみです。
    次のような CMakeLists.txt ファイルをディレクトリに作成します。
    1. cmake_minimum_required(VERSION 3.10)
    2.  
    3. # プロジェクト名を指定
    4. project(Tutorial)
    5.  
    6. # 実行ファイルを追加
    7. add_executable(Tutorial tutorial.cxx)

バージョン番号と設定用ヘッダファイルの追加

  • バージョン番号の追加
    実行ファイルとプロジェクトにバージョン番号を追加します。
    1. cmake_minimum_required(VERSION 3.10)
    2.  
    3. # プロジェクト名とバージョンの指定
    4. project(Tutorial VERSION 1.0)
  • 設定用ヘッダファイルの生成
    設定したバージョン番号をソースコードに渡すためのヘッダファイルを生成します。
    configure_fileコマンドを使用することで、テンプレートファイル(TutorialConfig.h.in)内にCMakeLists.txtで定義した変数の内容を埋め込んで、ヘッダファイル(TutorialConfig.h)を生成します。
    1. configure_file(TutorialConfig.h.in TutorialConfig.h)
  • 検索パスの追加
    設定用ヘッダファイルはバイナリツリーに書き込まれます。
    そのため、ヘッダファイルを #include で検索するためには、パスのリストに追加する必要があります。
    CMakeLists.txt の最後に次の行を追加します。
    1. target_include_directories(Tutorial PUBLIC
    2.                            "${PROJECT_BINARY_DIR}"
    3.                            )
  • テンプレートファイル
    設定用ヘッダファイル(TutorialConfig.h)の元となるテンプレートファイル(TutorialConfig.h.in)を作成します。
    1. // チュートリアル用の設定済みオプション
    2. #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
    3. #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
    CMakeがこのヘッダーファイルを生成すると、@Tutorial_VERSION_MAJOR@ と @Tutorial_VERSION_MINOR@ が変数値に置き換えられます。
  • ソースファイルの変更
    tutorial.cxxを変更して、設定用ヘッダーファイル(TutorialConfig.h)をインクルードします。
    以下のように実装することで実行可能ファイルの名前とバージョン番号を出力できます。
    1.   if (argc < 2) {
    2.     // report version
    3.     std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
    4.               << Tutorial_VERSION_MINOR << std::endl;
    5.     std::cout << "Usage: " << argv[0] << " number" << std::endl;
    6.     return 1;
    7.   }

C++規格への対応

  • コードの修正
    tutorial.cxx内のatofをstd::stodに置き換えて、C++11規格の機能を追加します。
    同時に#include <cstdlib>を削除します。
    1.   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宣言を必ず追加してください。
    1. cmake_minimum_required(VERSION 3.10)
    2.  
    3. # プロジェクト名とバージョンの指定
    4. project(Tutorial VERSION 1.0)
    5.  
    6. # C++規格の指定
    7. set(CMAKE_CXX_STANDARD 11)
    8. set(CMAKE_CXX_STANDARD_REQUIRED True)

ビルドとテスト

cmakeもしくはcmake-guiを実行して、プロジェクトを構成し、選択したビルドツールでビルをします。

For example, from the command line we could navigate to the Help/guide/tutorial directory of the CMake source code tree and create a build directory:

  1. mkdir Step1_build

Next, navigate to the build directory and run CMake to configure the project and generate a native build system:

  1. cd Step1_build
  2. cmake ../Step1

Then call that build system to actually compile/link the project:

  1. cmake --build .

Finally, try to use the newly built Tutorial with these commands:

  1. Tutorial 4294967296
  2. Tutorial 10
  3. Tutorial