クイック CMake チュートリアル
このチュートリアルでは、CLion で単純な CMake プロジェクトを作成して開発する手順を案内します。 段階的に、ビルドシステムとしての CMake(英語) の基本と、CMake 固有の IDE 設定とアクションを学習します。
1。 シンプルな CMake プロジェクト
CMake(英語) は、 CMakeLists と呼ばれるスクリプトを使用して、特定の環境用のビルドファイル (Unix マシンのメイクファイルなど) を生成するメタビルドシステムです。
CLion で新しい CMake プロジェクトを作成すると、プロジェクトルートに CMakeLists.txt ファイルが自動的に生成されます。
サンプル CMake プロジェクトを開始する
メインメニューから を選択します。
左側のペインで C++ 実行ファイル を選択します。
この例では、プロジェクト名は cmake_testapp で、選択された言語標準は C++17 です。

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

自動生成された 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 実行可能ターゲットを 追加(英語)します。 ターゲットについては 後述します。
IDE の左側のツールバーにある
をクリックして CMake ツールウィンドウを開き、プロジェクトのロードの進捗とステータスを確認できます:

2。 CMake ターゲットと CLion 構成
ターゲット(英語)は、CMake スクリプトを使用して構築される実行可能ファイルまたはライブラリです。 1 つのスクリプトで複数のビルドターゲットを定義できます。
今のところ、テストプロジェクトには cmake_testapp という 1 つのビルドターゲットしかありません。 最初のプロジェクトのロード時に、CLion はこのターゲットに関連付けられた実行/デバッグ構成を自動的に追加します:

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

このダイアログの 起動前 領域に注目してください。 ビルド は、デフォルトで起動前のステップとして設定されます。 この構成を使用してターゲットをデバッグまたは実行するだけでなく、ビルドを実行することもできます。 CLion で利用できるさまざまなビルドアクションの詳細については、 ビルドアクション を確認してください。
3。 既存のターゲットへのファイルの追加
新しいソースファイル general.cpp を作成し、それを cmake_testapp ターゲットに追加しましょう。
プロジェクトツリーでルートフォルダーを右クリックし、 新規 | C/C++ ソースファイル を選択します:

ターゲットに追加 チェックボックスを設定します。

OK をクリックすると、新しいファイルが
add_executableコマンドに追加されます。
4。 新しいターゲットの追加
次に、さらに 2 つのファイルを追加し、それらの実行可能ファイルとライブラリターゲットを作成しましょう。
新しい実行可能ターゲット
プロジェクトツリーでルートフォルダーを右クリックし、 新規 | C/C++ ソースファイル を再度選択します。
ファイル名を設定します (この例では calc )。
ターゲットに追加 フィールドで、 cmake_testapp チェックボックスをオフにします。
新しいターゲットの追加 リンクをクリックします。

ターゲット名(
cmake_testapp_calc)を指定し、 追加 をクリックします:
新しく作成したターゲットがリストに表示されます。
cmake_testapp_calcターゲットのみが選択されていることを確認します。
OK をクリックします。
CLion は新しい
add_executableコマンドを CMakeLists.txt に追加し、プロジェクトを再ロードします:
再ロード後、新しい構成が構成スイッチャーに表示されます:

新しいライブラリターゲット
プロジェクトツリーでルートフォルダーを右クリックし、 新規 | C/C++ ソースファイル を再度選択します。
ファイル名 ( calc_lib ) を指定します。
ターゲットに追加 フィールドのチェックボックスをオフにします。
新しいターゲットの追加 をクリックします。

ドロップダウンリストで、
add_libraryを選択します。
ターゲット名(
cmake_testapp_lib)を設定し、 追加 をクリックします。
新しく作成したターゲットがリストに表示されます。
他のターゲットのチェックボックスがオフになっていることを確認してください。

関連するヘッダーを作成する チェックボックスを設定して、ヘッダーファイル calc_lib.h も追加します。
OK をクリックします。
CLion は
add_libraryコマンドを CMakeLists.txt に追加し、プロジェクトを再ロードします:
実行可能ファイルターゲットの場合と同様に、CLion はライブラリターゲットの構成も自動的に作成します:

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

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

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

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

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

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。 ビルドタイプ
これまで作成したすべての実行/デバッグ構成は Debug構成であり、これは自動的に構成された CMake プロファイルのデフォルトビルド型です。
例: デバッグビルドと リリースビルドを分離しましょう。 このために、新しい CMake プロファイルを に追加 () し、そのビルドタイプを リリース に設定します。

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

8。 インクルードディレクトリの追加
別のディレクトリにある追加のヘッダーを使用するには、すべてのターゲットまたは一部の特定のターゲットに追加する必要があります。
例として、プロジェクトルートの下に includes 、 includes/general 、 includes/math の3つのディレクトリを作成します。 プロジェクトツリーのコンテキストメニューで オプションを使用します。

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 からヘッダーをインクルードできます。
9。 リンクライブラリ
静的ライブラリ
ステップ 4 では、 cmake_testapp_lib という静的ライブラリを作成しました (デフォルトのファイル名は libcmake_testapp_lib.a です)。
次に、このライブラリをプロジェクトにリンクする方法を見てみましょう。 便宜上、別のフォルダーを作成して使用します。
プロジェクトルートに lib ディレクトリを作成します。
libcmake_testapp_lib.a をデフォルトの場所である cmake-build-debug から lib フォルダーにコピーします。

次のコマンドを追加して、このライブラリを cmake_testapp ターゲットにリンクします。
find_library(TEST_LIBRARY cmake_testapp_lib lib) target_link_libraries(cmake_testapp LINK_PUBLIC ${TEST_LIBRARY})find_library(英語) は、ライブラリへのフルパスを提供します。
次に、
${TEST_LIBRARY}変数を介して target_link_libraries(英語) コマンドに直接渡します。

動的ライブラリ
共有 (動的) ライブラリのケースを説明するために、Portable Network Graphics (PNG) ファイルの読み取りおよび書き込み用の C ライブラリである LibPNG(英語) を使用する例を取り上げます。
vcpkg を使用してライブラリパッケージをインストールする
CLion は、C/C++ のパッケージマネージャーである vcpkg と統合されます。 これを使用して、IDE から直接ライブラリをすばやくインストールします。
この手順に従って vcpkg をインストールします。
vcpkg ツールウィンドウで libpng を検索します:

右側のペインで インストール をクリックし、インストールが完了するまで待ちます。
ライブラリを CMakeLists.txt に追加する
CMakeLists.txt ファイルを開き、次のコマンドを追加します。
find_package(PNG REQUIRED) include_directories(${PNG_INCLUDE_DIR}) target_link_libraries(cmake_testapp PRIVATE ${PNG_LIBRARY})ライブラリが正しくリンクされているかどうかを確認するには、ライブラリヘッダーの 1 つを main.cpp に含めてみます。

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

10。 CMake デバッグ
CMake の構成中にエラーや望ましくない動作が発生した場合は、プロジェクト内の他のコードと同様に CMake スクリプトをデバッグできます。
1 つまたは複数の CMakeLists.txt ファイルにブレークポイントを配置します。
最上位の CMakeLists.txt を開き、最初のコマンドの横にあるガターアイコンをクリックして、 デバッグ を選択します。

CLion は CMake デバッグセッションを開始します:

詳細については、 CMake デバッグ機能 を参照してください。
11。 CMakeLists.txt の編集に関するヒント
CLion は、CMake スクリプトを効果的に扱うのに役立つコードインサイト機能を提供します。 例:
CMake の 構造ビューには、スクリプトで使用された変数、関数、マクロ、ターゲットが表示されます。 それを開くには、 Alt+7 (ツールウィンドウの場合) または Ctrl+F12 (ポップアップの場合) を押します。

コード補完は、
find_package()などのコマンドの引数を含む、 CMakeLists.txt のほとんどの要素に対して機能します。
クイックドキュメントポップアップは、コード要素に関する詳細情報を取得できます。 呼び出すには、マウスホバーを使用するか、 Ctrl+Q を押します。
補完の提案についても簡単なドキュメントを表示できます。

で CMake ファイルの色とフォントスキームを調整できます。

12。 CTest の使用
この章では、CMake ビルドプロセスの一部としてテストをコンパイルおよび実行するためのフレームワークである CTest(英語) の使用方法について簡単な例を示します。 フレームワークの一般的な説明は、 CTest のサポートにあります。
サンプルプロジェクトに CTest を追加する
プロジェクトルートに ctest ディレクトリを作成します。
次のファイルを ctest ディレクトリに追加します。
ソースファイル addvalues_zero.cpp 。 現時点では、このファイルを CMake ターゲットにリンクしないでください。
ヘッダーファイル assert_macro.h 。 現時点では、このファイルを CMake ターゲットにリンクしないでください。
CMakeLists.txt スクリプト。

ctest/CMakeLists.txt に次の行を追加します。
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR) add_executable(ctest_exe_addvalues_zero addvalues_zero.cpp) target_link_libraries(ctest_exe_addvalues_zero LINK_PUBLIC cmake_testapp_lib) add_test(NAME ctest_addvalues_zero COMMAND ctest_exe_addvalues_zero) set_tests_properties(ctest_addvalues_zero PROPERTIES PASS 0)最初の行は、CMake のバージョン 3.14 に対応する CTest のサポートされている最小バージョンを示しています。
ここでは add_test(英語) コマンドを使用して、
ctest_exe_addvalues_zero実行可能ファイルを CTest に登録しています。次に、CTest を有効にして、トップレベルの CMakeLists.txt でサブプロジェクトを宣言する必要があります。
enable_testing() add_subdirectory(ctest)enable_testing(英語) コマンドは、CTest を実行する組み込みのターゲット
テストタイトルを作成します。プロジェクトを再読み込みしてください。
テストするコードを追加する
CTest でテストするコードを準備しましょう。
calc_lib.cpp に簡単な関数を追加します
int add_values (int a, int b) { return a+b;}関連付けられたヘッダー calc_lib.h に、関数宣言を追加します。
int add_values (int a, int b);
テストソース内にコードを追加する
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" #include "../calc_lib.h" int test_addvalues_zero() { int err_code = 0; assertEqual (add_values(0, 0) == 0); assertEqual (add_values(-5, 5) == 0); return err_code; } int main() { return test_addvalues_zero(); }
CTest 構成を編集する
メインメニューで へ移動します。
CTest アプリケーション ノードに、自動的に作成された すべての CTest 構成があります。
テスト対象のコードは
ctest_exe_addvalues_zero実行可能ファイルにあるため、構成設定でその実行可能ファイルをビルドターゲットとして選択する必要があります。
実行するテストリスト フィールドも確認してみましょう。 ペンアイコンをクリックして 利用可能なテストのリスト ダイアログを開くと、一連のテストを表示および調整できます:

CTest 構成を実行して結果を調べる
構成スイッチャーで すべての CTest を選択し、
をクリックするか、 Shift+F10 を押します。

Test Runner ウィンドウで結果を確認します:

13。 お役立ちリンク
CLion で CMake をさらに深く掘り下げるには、以下を学んでください: