CLion 2023.2 ヘルプ

クイック CMake チュートリアル

このチュートリアルでは、CLion で単純な CMake プロジェクトを作成および開発するプロセスを説明します。段階的に、ビルドシステムとしての CMake(英語) の基本と、CMake 固有の IDE 設定とアクションを学習します。

1. シンプルな CMake プロジェクト

CMake(英語) は、CMakeLists と呼ばれるスクリプトを使用して、特定の環境用のビルドファイル (Unix マシンのメイクファイルなど) を生成するメタビルドシステムです。

CLion で新しい CMake プロジェクトを作成すると、プロジェクトルートに CMakeLists.txt ファイルが自動的に生成されます。

サンプル CMake プロジェクトを開始する

  1. メインメニューからファイル | 新しいプロジェクトを選択します。

  2. 左側のペインで C++ 実行ファイルを選択します。

    この例では、プロジェクト名は cmake_testapp で、選択された言語標準は C++17 です。

    Creating a new CMake project

    作成をクリックします。

  3. CLion は、単一のソースファイル main.cppCMakeLists.txt スクリプトを含むスタブプロジェクトをルートに生成します。

    CMakeLists.txt in a stub CMake project

    自動生成された CMakeLists.txt には次のコマンドが含まれています。

    コマンド

    説明

    cmake_minimum_required(VERSION 3.26)

    デフォルトのツールチェーンで設定されているように、最低限必要な CMake のバージョンを指定(英語)します。ほとんどの場合、CMake 実行可能ファイルが意図的に変更されていなければ、これがバンドルされた CMake バージョンです。

    project(cmake_testapp)

    プロジェクト作成時に指定した内容に従ってプロジェクト名を定義します。

    set(CMAKE_CXX_STANDARD 17)

    プロジェクトの作成時に選択したように、CMAKE_CXX_STANDARD 変数を 17 の値に設定(英語)します。

    add_executable(cmake_testapp main.cpp)

    main.cpp からビルドされる cmake_testapp 実行可能ターゲットを追加(英語)します。ターゲットについては後述します。

  4. IDE の左側のツールバーにある App icons expui c make tool window をクリックして CMake ツールウィンドウを開き、プロジェクトのロードの進行状況とステータスを確認できます。

    CMake tool window

2. CMake ターゲットと CLion 構成

ターゲット(英語)は、CMake スクリプトを使用して構築される実行可能ファイルまたはライブラリです。1 つのスクリプトで複数のビルドターゲットを定義できます。

今のところ、テストプロジェクトには cmake_testapp という 1 つのビルドターゲットしかありません。最初のプロジェクトのロード時に、CLion はこのターゲットに関連付けられた実行 / デバッグ構成を自動的に追加します。

Default configuration for a new CMake project

スイッチャーで実行構成の編集をクリックして詳細を表示します。ターゲット名と実行可能ファイル名は、CMakeLists.txt で指定したものと同じです。

Details of the default configuration for a new CMake project

このダイアログの起動前領域に注目してください。ビルドは、デフォルトで起動前のステップとして設定されます。この構成を使用してターゲットをデバッグまたは実行するだけでなく、ビルドを実行することもできます。CLion で使用できるさまざまなビルドアクションの詳細については、ビルドアクションを確認してください。

3. 既存のターゲットへのファイルの追加

新しいソースファイル general.cpp を作成し、それを cmake_testapp ターゲットに追加しましょう。

  1. プロジェクトツリーでルートフォルダーを右クリックし、新規 | C/C++ ソースファイルを選択します。

    Adding a source file
  2. ターゲットに追加チェックボックスを設定します。

    Adding a file to an existing target
  3. OK をクリックすると、新しいファイルが add_executable コマンドに追加されます。

    Source file added to add_executable

4. 新しいターゲットの追加

次に、さらに 2 つのファイルを追加し、それらの実行可能ファイルとライブラリターゲットを作成しましょう。

新しい実行可能ターゲット

  1. プロジェクトツリーでルートフォルダーを右クリックし、新規 | C/C++ ソースファイルを再度選択します。

  2. ファイル名を設定します (この例では calc)。

  3. ターゲットに追加フィールドで、cmake_testapp チェックボックスをオフにします。

  4. 新しいターゲットの追加リンクをクリックします。

    Adding a file to a new target
  5. ターゲット名 (cmake_testapp_calc) を指定し、追加をクリックします。

    Adding a new executable target
  6. 新しく作成したターゲットがリストに表示されます。

    cmake_testapp_calc ターゲットのみが選択されていることを確認します。

    New target added to the list of targets

    OK をクリックします。

  7. CLion は新しい add_executable コマンドを CMakeLists.txt に追加し、プロジェクトを再ロードします。

    New target in CMakeLists.txt
  8. 再ロード後、新しい構成が構成スイッチャーに表示されます。

    Configuration for the newly added target

新しいライブラリターゲット

  1. プロジェクトツリーでルートフォルダーを右クリックし、新規 | C/C++ ソースファイルを再度選択します。

  2. ファイル名 (calc_lib) を指定します。

  3. ターゲットに追加フィールドのチェックボックスをオフにします。

  4. 新しいターゲットの追加をクリックします。

    Adding new target
  5. ドロップダウンリストで、add_library を選択します。

    New library target
  6. ターゲット名 (cmake_testapp_lib) を設定し、追加をクリックします。

    Adding a library target
  7. 新しく作成したターゲットがリストに表示されます。

    他のターゲットのチェックボックスがオフになっていることを確認してください。

    New library target added

    関連するヘッダーを作成するチェックボックスを設定して、ヘッダーファイル calc_lib.h も追加します。

    OK をクリックします。

  8. CLion は add_library コマンドを CMakeLists.txt に追加し、プロジェクトを再ロードします。

    New library target in CMakeLists.txt
  9. 実行可能ターゲットの場合と同様に、CLion はライブラリターゲットの構成を自動的に作成します。

    Configuration for the newly added library target

    ただし、これは実行不可能な構成であるため、実行またはデバッグしようとすると、「 App general balloon error 実行可能ファイルが指定されていません」というエラーメッセージが表示されます。

    Executable not specified error
  10. ライブラリファイルを取得するには、この構成をビルドする必要があります。スイッチャーでそれを選択し、Control+F9 を押すか、ビルドアイコンをクリックします。

    Building a library target

    その結果、libcmake_testapp_lib.a ファイルが cmake-build-debug フォルダーに表示されます。

    Library artifact

5. プロジェクトを再ロードする

CMakeLists.txt にいくつかの変更を手動で導入してみましょう。例: ライブラリターゲットの宣言に STATIC を追加します。

Manually changing CMakeLists.txt

CMakeLists.txt に変更を加えると、CLion はプロジェクトの再ロードを提案するアイコンを表示します。それをクリックするか、ショートカットを押します。

CMake reload icon

6. CMake プリセットと CLion CMake プロファイル

プロジェクトの CMake オプションを構成して共有するには、CMake プリセット、CLion の CMake プロファイル、またはその両方を使用できます。

CMake プロファイルには CMake プリセットと共通の設定が多く、VCS を介して共有することもできます。主な違いは、プロファイルが CLion ツールチェーンを参照することです。これには、CMake プリセットには存在せず、不要な情報 (デバッガーや環境設定など) が含まれています。

CMake プリセット

CMake プリセット(英語)は、次の 2 つのファイルを使用して CMake オプションを構成および共有する方法です。

  • プロジェクトごとのビルド用の CMakePresets.json。このファイルは VCS 経由で共有できます。

  • 開発者自身のローカルビルド用の CMakeUserPresets.json。このファイルは VCS にチェックインしないでください。

これらのファイルはどちらも同じ形式で、プロジェクトのルートディレクトリに配置する必要があります。

    CMake プロファイル

    プロファイルには、ツールチェーンビルド型、およびジェネレーター環境変数などの CMake オプションが含まれます。たとえば、異なるコンパイラーを使用したり、異なる設定でターゲットをビルドしたりするために、プロジェクトに複数のプロファイルを構成できます。

    リリースビルド用のプロファイルを追加する例については、次の章を参照してください。

      7. ビルドタイプ

      これまでに作成された実行 / デバッグ構成はすべてデバッグ構成でした。これは、プロジェクト用に自動的に構成された CMake プロファイルのデフォルトのビルドタイプです。

      例: デバッグビルドリリースビルドを分離しましょう。このために、新しい CMake プロファイルを設定 | ビルド、実行、デプロイ | CMake に追加 (App general inline add hover) し、そのビルドタイプをリリースに設定します。

      Adding a release CMake profile

      ビルド結果の場所を指定するビルドディレクトリフィールドに注意してください。デフォルトのフォルダーは、デバッグプロファイルの場合は cmake-build-debugリリースプロファイルの場合は cmake-build-release です。App actions menu open は、他の任意の場所にいつでも設定できます。

      プロファイルを保存すると、スイッチャーに表示されます。

      CMake profiles in the configuration switcher

      8. インクルードディレクトリの追加

      別のディレクトリにある追加のヘッダーを使用するには、すべてのターゲットまたは一部の特定のターゲットに追加する必要があります。

      1. 例として、プロジェクトルートに 3 つのディレクトリ includesincludes/generalincludes/math を作成してみましょう。プロジェクトツリーのコンテキストメニューで新規 | ディレクトリオプションを使用します。

        New include directories
      2. CMakeLists.txt を開き、次のコマンドを追加します。

        target_include_directories (cmake_testapp_lib PUBLIC includes/math) target_include_directories (cmake_testapp_lib PUBLIC includes/general)

        これら 2 つのコマンドにより、general および math にあるヘッダーを cmake_testapp_lib ターゲットのソースから利用できるようになります。

        例: header_math.h というヘッダーを includes/math フォルダー内に配置すると、#include "header_math.h" を使用して calc_lib.cpp からヘッダーをインクルードできます。

      静的ライブラリ

      ステップ 4 では、cmake_testapp_lib という静的ライブラリを作成しました (デフォルトのファイル名は libcmake_testapp_lib.a です)。

      次に、このライブラリをプロジェクトにリンクする方法を見てみましょう。便宜上、別のフォルダーを作成して使用します。

      1. プロジェクトルートに lib ディレクトリを作成します。

      2. libcmake_testapp_lib.a をデフォルトの場所 ( cmake-build-debug) から lib フォルダーにコピーします。

        Library artifact in the lib folder
      3. 次のコマンドを追加して、このライブラリを cmake_testapp ターゲットにリンクします。

        find_library(TEST_LIBRARY cmake_testapp_lib lib) target_link_libraries(cmake_testapp LINK_PUBLIC ${TEST_LIBRARY})
        Linking a static library

      動的ライブラリ

      共有 (動的) ライブラリのケースを説明するために、Portable Network Graphics (PNG) ファイルの読み取りおよび書き込み用の C ライブラリである LibPNG(英語) を使用する例を取り上げます。

      vcpkg を使用してライブラリパッケージをインストールする

      CLion は、C/C++ のパッケージマネージャーである vcpkg と統合されます。これを使用して、IDE から直接ライブラリをすばやくインストールします。

      1. この手順に従って vcpkg をインストールします。

      2. vcpkg ツールウィンドウで、libpng を検索します。

        Search for libpng in vcpkg
      3. 右側のペインでインストールをクリックし、インストールが完了するまで待ちます。

      ライブラリを CMakeLists.txt に追加する

      1. CMakeLists.txt ファイルを開き、次のコマンドを追加します。

        find_package(PNG REQUIRED) include_directories(${PNG_INCLUDE_DIR}) target_link_libraries(cmake_testapp PRIVATE ${PNG_LIBRARY})
      2. ライブラリが正しくリンクされているかどうかを確認するには、ライブラリヘッダーの 1 つを main.cpp に含めてみます。

        Including a LibPNG header

        例: png.h を含めます。次に、Control+B を押してこのファイルを開くことができます。

        Go to the png.h file

      10. CMake デバッグ

      CMake の構成中にエラーや望ましくない動作が発生した場合は、プロジェクト内の他のコードと同様に CMake スクリプトをデバッグできます。

      1. 1 つまたは複数の CMakeLists.txt ファイルにブレークポイントを配置します。

      2. 最上位の CMakeLists.txt を開き、最初のコマンドの横にあるガターアイコンをクリックして、デバッグを選択します。

        Starting a CMake debug session from gutter
      3. CLion は CMake デバッグセッションを開始します。

        CMake debug session

        詳細については、CMake デバッグ機能を参照してください。

      11. CMakeLists.txt の編集に関するヒント

      CLion は、CMake スクリプトを効果的に操作するのに役立つコードインサイト機能を提供します。例:

      • CMake の構造ビューには、スクリプトで使用された変数、関数、マクロ、ターゲットが表示されます。それを開くには、Alt+7 (ツールウィンドウの場合) または Control+F12 (ポップアップの場合) を押します。

        CMake script structure
      • コード補完は、find_package() などのコマンドの引数を含む、CMakeLists.txt のほとんどの要素に対して機能します。

        Completion for find_package
      • クイックドキュメントポップアップは、コード要素に関する詳細情報を取得できます。呼び出すには、マウスホバーを使用するか、Control+Q を押します。

        補完の提案についても簡単なドキュメントを表示できます。

        Quick documentation for completion suggestions
      • 設定 | エディター | カラースキームの切り替え | CMake で CMake ファイルの色とフォントスキームを調整できます。

        Color scheme settings for CMake

      12. CTest の使用

      この章では、CMake ビルドプロセスの一部としてテストをコンパイルおよび実行するためのフレームワークである CTest(英語) の使用方法の簡単な例を示します。フレームワークの一般的な説明は CTest のサポートにあります。

      サンプルプロジェクトに CTest を追加する

      1. プロジェクトルートに ctest ディレクトリを作成します。

      2. 次のファイルを ctest ディレクトリに追加します。

        • ソースファイル addvalues_zero.cpp。現時点では、このファイルを CMake ターゲットにリンクしないでください。

        • ヘッダーファイル assert_macro.h。現時点では、このファイルを CMake ターゲットにリンクしないでください。

        • CMakeLists.txt スクリプト。

        Adding a folder for CTest
      3. ctest/CMakeLists.txt に次の行を追加します。

        cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR) add_executable(ctest_exe_addvalues_zero addvalues_zero.cpp) add_test(ctest_addvalues_zero ctest_exe_addvalues_zero)

        最初の行は、CMake のバージョン 3.14 に対応する CTest のサポートされている最小バージョンを示しています。

        ここでは add_test(英語) コマンドを使用して、ctest_exe_addvalues_zero 実行可能ファイルを CTest に登録しています。

      4. これで、実際のコードをテストソース内に配置できます。

        • assert_macro.h :

          #include <iostream> #include <sstream> #define assertEqual( ... ) \ do { \ if( !( __VA_ARGS__ ) ) { \ std::cerr << "Unit test assert [ " \ << ( #__VA_ARGS__ ) \ << " ] failed in line [ " \ << __LINE__ \ << " ] file [ " \ << __FILE__ << " ]" \ << std::endl; \ err_code = 1; \ } \ } while( false )

        • addvalues_zero.cpp :

          #include "assert_macro.h" int test_addvalues_zero() { int err_code = 0; assertEqual (0+0 == 0); assertEqual ((-5)+5 == 0); return err_code; } int main() { return test_addvalues_zero(); }
      5. 次に、CTest を有効にして、トップレベルの CMakeLists.txt でサブプロジェクトを宣言する必要があります。

        enable_testing() add_subdirectory(ctest)

        enable_testing(英語) コマンドは、CTest を実行する組み込みのターゲット test を作成します。

      6. プロジェクトを再読み込みしてください。

      テストするコードを追加する

      CTest でテストするコードを準備しましょう。

      1. calc_lib.cpp に簡単な関数を追加します

        int add_values (int a, int b) { return a+b;}
      2. 関連付けられたヘッダー calc_lib.h に、関数宣言を追加します。

        int add_values (int a, int b);
      Adding a function to be tested

      CTest 構成を編集する

      1. 実行 | 実行構成の編集に移動します。

      2. CTest アプリケーションノードに、自動的に作成されたすべての CTest 構成があります。

        テストする関数は cmake_testapp_lib ライブラリにあるため、構成設定で構築するターゲットを変更する必要があります。

        CTest configuration - changing the target

      3. 実行するテストリストフィールドも確認してみましょう。ペンアイコンをクリックして利用可能なテストのリストダイアログを開き、一連のテストを表示および調整できます。

        List of the available tests in CTest configuration

      CTest 構成を実行して結果を調べる

      1. 構成スイッチャーですべての CTest を選択し、The Run button をクリックするか、Shift+F10 を押します。

        Running a CTest configuration
      2. テストランナーウィンドウで結果を見つけます。

        CTest results

      13. お役立ちリンク

      CLion で CMake をさらに深く掘り下げるには、次の方法を学びます。

      関連ページ:

      CMakeLists.txt

      CMakeLists.txt ファイルには、プロジェクトのソースファイルとターゲット(実行可能ファイル、ライブラリ、その両方)を記述する指示文と命令のセットが含まれています。新しいプロジェクトを作成すると、CLion は自動的に CMakeLists.txt ファイルを生成してプロジェクトのルートディレクトリに配置します。プロジェクトを開くには、CLion を最上位の CMakeLists.txt にポイントしてプロジェクトとして開くを選択します。以下の例は、単純な「Hello, World」の CMake...

      ツールチェーン

      CLion の CMake、Makefile、compilation database プロジェクトの場合、ツールチェーンは、アプリケーションのビルドと実行に必要なすべてのツールのセットです。CMake 実行可能ファイル(CMake プロジェクト)、ビルドツール、C/C++ コンパイラー、デバッガーバイナリ、作業環境。CLion の使用を開始すると、デフォルトのツールチェーンがすでに使用可能になっています。開発で使用することはできますが、プロジェクトのニーズに合わせてツールのセットを調整することもで...

      ビルドアクション

      プロジェクトのビルド、クリーニング、インストールのアクションは、メインメニューのビルドセクションにまとめられています。以下の表は、ビルドアクションが次のタイプのプロジェクトでどのように機能するかを示しています。CMake プロジェクト、Makefile プロジェクト、カスタムビルドターゲットとカスタム実行 / デバッグ構成を含む Compilation Database プロジェクト。CMake プロジェクトのビルドアクション:プロジェクトのビルド現在のプロジェクト用に設定された各 CMake プロファ...

      CUDA プロジェクト

      CUDA(Compute Unified Device Architecture)は、NVidia による並列コンピューティングプラットフォームおよびプログラミングモデルです。CUDA 対応の GPU を操作するための C/C++ 言語拡張機能と API を提供します。CLion は CUDA C/C++ をサポートし、コードインサイトを提供します。また、CLion は、新規プロジェクトウィザードを使用して CMake ベースの CUDA アプリケーションを作成できます。CLion の CUDA...

      Qt プロジェクト

      Qt は、GUI アプリケーションを作成するためのクロスプラットフォームの C++ フレームワークです。Qt は独自のビルドシステム qmake を使用し、バージョン Qt4 以降の CMake でのビルドもサポートしています。純粋な Qmake プロジェクトを CLion に直接インポートすることはできません。ただし、CMake に変換すると、通常の CMake アプリケーションとして開いて管理できます。新規プロジェクトウィザードを使用して、CLion で CMake ベースの Qt プロジェクトを作成する...

      CMake プロファイル

      CMake プロジェクトのビルドに必要な設定は CMake プロファイルに組み込まれています。これには、ツールチェーンとビルド型に加え、ジェネレーターや環境変数などの CMake オプションが含まれます。たとえば、異なるコンパイラーを使用したり、異なる設定でターゲットをビルドしたりするために、プロジェクトに複数のプロファイルを構成できます。プロファイル設定にアクセスする次のいずれかを実行して、CMake プロファイル設定を開きます。に移動します。を押してアクションの検索ダイアログを開き、CMake...