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

2024-06-19

CMakeにおける「Properties: Targets」の「RUNTIME_OUTPUT_NAME」プログラミング解説

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

重要なポイント

  • 実行時ターゲットにのみ適用: 静的ライブラリなどの非実行時ターゲットには影響しません。
  • 出力名のベース名: ファイル拡張子は含まれません。
  • 優先順位: OUTPUT_NAMEOUTPUT_NAME_<CONFIG> プロパティよりも優先されます。
  • 設定方法: ターゲットの set_target_properties コマンドを使用して設定できます。

set_target_properties(myprogram RUNTIME_OUTPUT_NAME myapp)

上記の例では、myprogram ターゲットの実行時出力ファイル名は myapp になります。実際のファイル名は、プラットフォームやビルドシステムの設定によって .exe.out などの拡張子が付与されます。

補足

  • RUNTIME_OUTPUT_NAME は、複数の構成(Debug、Release など)ごとに異なる値を設定できます。
  • プロジェクト内の複数のターゲットで同じ RUNTIME_OUTPUT_NAME を使用することは避けてください。
  • CMakeのバージョン 3.0 以降でのみ使用可能です。


    CMakeにおける「RUNTIME_OUTPUT_NAME」プロパティのサンプルコード

    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 という名前で出力されます。

    • 上記の例はあくまで基本的な使い方を示しています。実際のプロジェクトでは、より複雑な設定が必要になる場合があります。
    • CMakeのドキュメントには、RUNTIME_OUTPUT_NAME プロパティに関する詳細情報が記載されています。


      CMakeにおける「RUNTIME_OUTPUT_NAME」プロパティの代替方法

      「RUNTIME_OUTPUT_NAME」プロパティは、実行時ターゲットの出力ファイル名を設定する便利な方法ですが、状況によっては代替方法の方が適切な場合があります。

      代替方法

      • OUTPUT_NAME プロパティ:
        • CMake 2.8 以降で使用可能
        • RUNTIME_OUTPUT_NAME よりも優先順位が低い
        • 例: set_target_properties(myprogram OUTPUT_NAME myapp)
      • SET_TARGET_COMPILE_FILE_NAME コマンド:
        • コンパイル済み中間ファイルのファイル名を指定
        • 実行時ターゲットのみ適用可能
        • 拡張子を含めて設定する
        • 例: set_target_properties(myprogram COMPILE_FILE_NAME ${CMAKE_BINARY_DIR}/myapp.exe)
      • カスタムターゲット:
        • より複雑な出力ファイル名を設定したい場合
        • ターゲット依存関係を使用して、実行可能ファイルの生成を制御
        • 詳細な設定が可能
        • 例:
      add_custom_target(myapp COMMAND myprogram ${CMAKE_BINARY_DIR}/myapp.exe)
      add_dependencies(myapp myprogram)
      

      選択ガイド

      • シンプルな出力ファイル名を設定したい場合は、RUNTIME_OUTPUT_NAME が最も簡単です。
      • 静的ライブラリなどの非実行時ターゲットにも適用したい場合は、OUTPUT_NAME を使用します。
      • 拡張子を含めたカスタムな出力ファイル名を設定したい場合は、SET_TARGET_COMPILE_FILE_NAME またはカスタムターゲットを使用します。
      • より複雑な出力ファイル生成ロジックが必要な場合は、カスタムターゲットが最適です。
      • 各代替方法には、独自の利点と欠点があります。
      • プロジェクトの要件に応じて適切な方法を選択してください。
      • CMakeのドキュメントには、各代替方法に関する詳細情報が記載されています。