【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
の最初の構成になります。- 複数の構成をセミコロン (
\;
) で区切ります。 config1
、config2
、...、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
プロジェクトが Debug
と Release
の両方の構成でビルドされます。
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:Debug
とmyprogram:Release
に解決されます。- この例では、
myproject
プロジェクトがDebug
とRelease
の両方の構成でビルドされます。
例 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
プロジェクトがDebug
、Release
、MyCustomConfig
の 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
コマンドはDebug
とRelease
の両方の構成で実行されます。- この例では、
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
プロジェクトがDebug
とRelease
の両方の構成でビルドできます。
CMAKE_ARGS を使用する
CMAKE_ARGS
変数は、CMakeの引数を指定するために使用されます。この変数を使用して、デフォルトビルド構成を指定する -DCMAKE_BUILD_TYPE
オプションを渡すことができます。
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CONFIGURATION_TYPES="Debug;Release" .
説明
-DCMAKE_CONFIGURATION_TYPES="Debug;Release"
オプションは、myproject
プロジェクトがDebug
とRelease
の両方の構成でビルドできることを指定します。-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
プロジェクトがDebug
とRelease
の両方の構成でビルドできます。
注意事項
- 具体的な状況に合わせて、最適な方法を選択してください。
- 上記の代替方法は、
CMAKE_DEFAULT_CONFIGS
変数よりも柔軟性が高いかもしれませんが、CMAKE_DEFAULT_CONFIGS
変数よりも複雑になる可能性があります。
- CMakeのスクリプトについては、CMakeのドキュメントを参照