【CMake】Ninja Multi-Configでデフォルト構成を自在に操る!「CMAKE_DEFAULT_CONFIGS」徹底解説


CMAKE_DEFAULT_CONFIGS は、CMakeの Ninja Multi-Config ジェネレータで使用される変数です。この変数は、ビルドターゲットのデフォルトビルド構成を指定するために使用されます。

導入バージョン

この変数は、CMake 3.17 で導入されました。

構文

set(CMAKE_DEFAULT_CONFIGS "config1;config2;...;configN")

説明

  • CMAKE_DEFAULT_CONFIGS が設定されていない場合、デフォルトのビルド構成は CMAKE_CONFIGURATION_TYPES の最初の構成になります。
  • 複数の構成をセミコロン (\;) で区切ります。
  • config1config2、...、configN は、Ninja Multi-Config ジェネレータ で使用可能なビルド構成の名前です。

cmake_minimum_required(VERSION 3.17)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
set(CMAKE_DEFAULT_CONFIGS "Debug;Release")

project(myproject)

add_executable(myprogram main.cpp)

この例では、myproject プロジェクトが DebugRelease の両方の構成でビルドされます。

  • CMAKE_DEFAULT_CONFIGS は、カスタムコマンドを実行する際のデフォルトのビルド構成を指定するためにも使用されます。
  • CMAKE_DEFAULT_CONFIGS が設定されていない場合、build.ninja ファイルは build-<Config>.ninja ファイルの最初の構成のものを使用します。
  • build.ninja ファイルには、ビルド構成ごとに build-<Config>.ninja という名前のファイルが含まれています。
  • CMAKE_DEFAULT_CONFIGS は、build.ninja ファイル内のターゲットエイリアスを解決するために使用されます。
  • CMAKE_DEFAULT_CONFIGS が設定されている場合、CMAKE_DEFAULT_BUILD_TYPE は無視されます。
  • CMAKE_DEFAULT_BUILD_TYPE は、デフォルトのビルド構成を指定するために使用されます。
  • CMAKE_DEFAULT_CONFIGS は、CMAKE_DEFAULT_BUILD_TYPE 変数と組み合わせて使用できます。

プログラミングにおける活用

CMAKE_DEFAULT_CONFIGS は、以下の状況で役立ちます。

  • カスタムコマンドを実行する際のデフォルトのビルド構成を指定したい場合
  • デフォルトのビルド構成をカスタマイズしたい場合
  • 複数の構成でビルドが必要なプロジェクトを開発している場合


cmake_minimum_required(VERSION 3.17)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
set(CMAKE_DEFAULT_CONFIGS "Debug;Release")

project(myproject)

add_executable(myprogram main.cpp)

説明

  • CMAKE_DEFAULT_CONFIGS 変数に Debug;Release を設定することで、build.ninja ファイル内のターゲットエイリアスが myprogram:Debugmyprogram:Release に解決されます。
  • この例では、myproject プロジェクトが DebugRelease の両方の構成でビルドされます。

例 2: デフォルトのビルド構成をカスタマイズ

cmake_minimum_required(VERSION 3.17)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release;MyCustomConfig")
set(CMAKE_DEFAULT_CONFIGS "MyCustomConfig")

project(myproject)

add_executable(myprogram main.cpp)

説明

  • ninja コマンドを実行すると、myprogram:MyCustomConfig ターゲットがビルドされます。
  • CMAKE_DEFAULT_CONFIGS 変数に MyCustomConfig を設定することで、デフォルトのビルド構成が MyCustomConfig になります。
  • この例では、myproject プロジェクトが DebugReleaseMyCustomConfig の 3 つの構成でビルドできます。

例 3: カスタムコマンドのデフォルトビルド構成を指定

cmake_minimum_required(VERSION 3.17)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
set(CMAKE_DEFAULT_CONFIGS "Debug;Release")

project(myproject)

add_executable(myprogram main.cpp)

add_custom_command(
    TARGET myprogram
    POST_BUILD
    COMMAND mycustomcommand
)

説明

  • CMAKE_DEFAULT_CONFIGS 変数に Debug;Release を設定することで、mycustomcommand コマンドは DebugRelease の両方の構成で実行されます。
  • この例では、myprogram ターゲットがビルドされた後に mycustomcommand コマンドが実行されます。
  • 具体的な状況に合わせて、この変数をさまざまな方法で使用することができます。
  • これらの例は、CMAKE_DEFAULT_CONFIGS 変数の基本的な使用方法を示しています。
  • この変数は、Ninja Multi-Config ジェネレータのみで使用できます。
  • CMAKE_DEFAULT_CONFIGS 変数は、CMake 3.17 以降でのみ使用できます。


CMAKE_DEFAULT_BUILD_TYPE を使用する

CMAKE_DEFAULT_BUILD_TYPE 変数は、CMAKE_DEFAULT_CONFIGS 変数よりも前に導入された変数です。この変数は、デフォルトのビルドタイプを指定するために使用されます。

cmake_minimum_required(VERSION 3.0)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
set(CMAKE_DEFAULT_BUILD_TYPE "Debug")

project(myproject)

add_executable(myprogram main.cpp)

説明

  • ninja コマンドを実行すると、myprogram:Debug ターゲットがビルドされます。
  • CMAKE_DEFAULT_BUILD_TYPE 変数に Debug を設定することで、デフォルトのビルドタイプが Debug になります。
  • この例では、myproject プロジェクトが DebugRelease の両方の構成でビルドできます。

CMAKE_ARGS を使用する

CMAKE_ARGS 変数は、CMakeの引数を指定するために使用されます。この変数を使用して、デフォルトビルド構成を指定する -DCMAKE_BUILD_TYPE オプションを渡すことができます。

cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CONFIGURATION_TYPES="Debug;Release" .

説明

  • -DCMAKE_CONFIGURATION_TYPES="Debug;Release" オプションは、myproject プロジェクトが DebugRelease の両方の構成でビルドできることを指定します。
  • -DCMAKE_BUILD_TYPE=Debug オプションは、デフォルトのビルドタイプを Debug に設定します。
  • このコマンドは、myproject プロジェクトを Debug 構成でビルドします。

カスタムスクリプトを使用する

カスタムスクリプトを使用して、デフォルトビルド構成を指定することもできます。このスクリプトは、CMakeLists.txt ファイル内の before_command コマンドで呼び出すことができます。

cmake_minimum_required(VERSION 3.0)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release")

project(myproject)

add_executable(myprogram main.cpp)

before_command()
    set(CMAKE_BUILD_TYPE "Debug")
end_command()

説明

  • このコマンドは、CMAKE_BUILD_TYPE 変数に Debug を設定することで、デフォルトのビルドタイプを Debug に設定します。
  • before_command コマンドは、CMakeLists.txt ファイルが処理される前に実行されます。
  • この例では、myproject プロジェクトが DebugRelease の両方の構成でビルドできます。

注意事項

  • 具体的な状況に合わせて、最適な方法を選択してください。
  • 上記の代替方法は、CMAKE_DEFAULT_CONFIGS 変数よりも柔軟性が高いかもしれませんが、CMAKE_DEFAULT_CONFIGS 変数よりも複雑になる可能性があります。
  • CMakeのスクリプトについては、CMakeのドキュメントを参照