CMakeで実行ファイル名を自由自在に設定!「RUNTIME_OUTPUT_NAME」プロパティの使い方を徹底解説
「RUNTIME_OUTPUT_NAME」は、CMakeの「Properties: Targets」カテゴリーにあるターゲットプロパティです。これは、実行可能ファイルや共有ライブラリなどの実行時ターゲットの出力ファイル名のベース名を指定するために使用されます。
重要なポイント
- 設定方法: ターゲットの
set_target_properties
コマンドを使用して設定できます。 - 優先順位:
OUTPUT_NAME
とOUTPUT_NAME_<CONFIG>
プロパティよりも優先されます。 - 出力名のベース名: ファイル拡張子は含まれません。
- 実行時ターゲットにのみ適用: 静的ライブラリなどの非実行時ターゲットには影響しません。
例
set_target_properties(myprogram RUNTIME_OUTPUT_NAME myapp)
上記の例では、myprogram
ターゲットの実行時出力ファイル名は myapp
になります。実際のファイル名は、プラットフォームやビルドシステムの設定によって .exe
、 .out
などの拡張子が付与されます。
- CMakeのバージョン 3.0 以降でのみ使用可能です。
- プロジェクト内の複数のターゲットで同じ
RUNTIME_OUTPUT_NAME
を使用することは避けてください。 RUNTIME_OUTPUT_NAME
は、複数の構成(Debug、Release など)ごとに異なる値を設定できます。
cmake_minimum_required(VERSION 3.0)
project(myproject)
set(SOURCE_FILES main.cpp)
add_executable(myprogram ${SOURCE_FILES})
set_target_properties(myprogram RUNTIME_OUTPUT_NAME myapp)
この例では、main.cpp
ファイルから myprogram
という名前の実行可能ファイルが生成されます。実行時の出力ファイル名は myapp
になります。
例2:複数の構成で異なる出力ファイル名を設定
cmake_minimum_required(VERSION 3.0)
project(myproject)
set(SOURCE_FILES main.cpp)
add_executable(myprogram ${SOURCE_FILES})
set_target_properties(myprogram RUNTIME_OUTPUT_NAME myapp)
set_target_properties(myprogram RUNTIME_OUTPUT_NAME myprogram_debug EXPLICIT_FOR_CONFIG Debug)
この例では、myprogram
ターゲットは Debug
構成では myapp_debug
、Release
構成では myapp
という名前で出力されます。
例3:プロジェクト内の複数のターゲットで異なる出力ファイル名を設定
cmake_minimum_required(VERSION 3.0)
project(myproject)
set(SOURCE_FILES main.cpp app.cpp)
add_executable(myprogram ${SOURCE_FILES})
set_target_properties(myprogram RUNTIME_OUTPUT_NAME myapp)
add_executable(myapp2 ${SOURCE_FILES})
set_target_properties(myapp2 RUNTIME_OUTPUT_NAME myapp2)
この例では、main.cpp
と app.cpp
ファイルから 2 つの異なる実行可能ファイルが生成されます。 myprogram
は myapp
、myapp2
は myapp2
という名前で出力されます。
- 上記の例はあくまで基本的な使い方を示しています。実際のプロジェクトでは、より複雑な設定が必要になる場合があります。
「RUNTIME_OUTPUT_NAME」プロパティは、実行時ターゲットの出力ファイル名を設定する便利な方法ですが、状況によっては代替方法の方が適切な場合があります。
代替方法
- カスタムターゲット:
- より複雑な出力ファイル名を設定したい場合
- ターゲット依存関係を使用して、実行可能ファイルの生成を制御
- 詳細な設定が可能
- 例:
- SET_TARGET_COMPILE_FILE_NAME コマンド:
- CMake 2.4 以降で使用可能
- コンパイル済み中間ファイルのファイル名を指定
- 実行時ターゲットのみ適用可能
- 拡張子を含めて設定する
- 例:
set_target_properties(myprogram COMPILE_FILE_NAME ${CMAKE_BINARY_DIR}/myapp.exe)
- OUTPUT_NAME プロパティ:
- CMake 2.8 以降で使用可能
- 実行時ターゲットだけでなく、静的ライブラリなどの非実行時ターゲットにも適用可能
RUNTIME_OUTPUT_NAME
よりも優先順位が低い- 例:
set_target_properties(myprogram OUTPUT_NAME myapp)
add_custom_target(myapp COMMAND myprogram ${CMAKE_BINARY_DIR}/myapp.exe)
add_dependencies(myapp myprogram)
- より複雑な出力ファイル生成ロジックが必要な場合は、カスタムターゲットが最適です。
- 拡張子を含めたカスタムな出力ファイル名を設定したい場合は、
SET_TARGET_COMPILE_FILE_NAME
またはカスタムターゲットを使用します。 - 静的ライブラリなどの非実行時ターゲットにも適用したい場合は、
OUTPUT_NAME
を使用します。 - シンプルな出力ファイル名を設定したい場合は、
RUNTIME_OUTPUT_NAME
が最も簡単です。
- プロジェクトの要件に応じて適切な方法を選択してください。
- 各代替方法には、独自の利点と欠点があります。