CMakeで実行ファイル名を自由自在に設定!「RUNTIME_OUTPUT_NAME」プロパティの使い方を徹底解説


「RUNTIME_OUTPUT_NAME」は、CMakeの「Properties: Targets」カテゴリーにあるターゲットプロパティです。これは、実行可能ファイルや共有ライブラリなどの実行時ターゲットの出力ファイル名のベース名を指定するために使用されます。

重要なポイント

  • 設定方法: ターゲットの set_target_properties コマンドを使用して設定できます。
  • 優先順位: OUTPUT_NAMEOUTPUT_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_debugRelease 構成では 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.cppapp.cpp ファイルから 2 つの異なる実行可能ファイルが生成されます。 myprogrammyappmyapp2myapp2 という名前で出力されます。

  • 上記の例はあくまで基本的な使い方を示しています。実際のプロジェクトでは、より複雑な設定が必要になる場合があります。


「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 が最も簡単です。
  • プロジェクトの要件に応じて適切な方法を選択してください。
  • 各代替方法には、独自の利点と欠点があります。