qt_add_executable
プラットフォーム固有のタイプのアプリケーションターゲットを作成し、確定します。
このコマンドはQt6
パッケージのCore
コンポーネントで定義されています:
find_package(Qt6 REQUIRED COMPONENTS Core)
このコマンドは Qt 6.0 で導入されました。
概要
qt_add_executable(target [WIN32] [MACOSX_BUNDLE] [MANUAL_FINALIZATION] sources...)
バージョンレスコマンドが無効になっている場合は、代わりにqt6_add_executable()
を使用してください。このコマンドと同じ引数セットをサポートしています。
説明
このコマンドは以下のタスクを実行します:
- ターゲット・プラットフォームに適したタイプのCMakeターゲットを作成する。
- ターゲットを
Qt::Core
ライブラリにリンクする。 - CMakeターゲットのファイナライズを処理する。
ターゲットの作成
Android を除くすべてのプラットフォームで、実行可能なターゲットが作成されます。すべての引数は、MANUAL_FINALIZATION
(存在する場合)を除き、標準の CMakeadd_executable()
コマンドに渡されます。Android では、MODULE
ライブラリが作成され、WIN32
またはMACOSX_BUNDLE
オプションは無視されます。いくつかのターゲット・プロパティもAndroid用に設定されます:
SUFFIX
ターゲット・プロパティは、ライブラリ・ファイル名にアーキテクチャ固有の接尾辞を付けるために設定されます。<lang>_VISIBILITY_PRESET
のターゲット・プロパティはdefault
に設定され、結果のバイナリでmain()
関数が表示されるようにします。
Qt::Core のリンク
すべてのQtアプリケーションは、Qt::Core
ライブラリにリンクする必要があるため、便宜的にこの処理を行います。
最終処理
ターゲットが作成された後、さらなる処理や最終化のステップが一般的に必要になります。実行するステップはプラットフォームとターゲットの様々なプロパティに依存します。
qt_finalize_target()とqt_finalize_project() です。
ターゲットのファイナライズは、qt_add_executable
を呼び出す際に同時に実行されるか、このコマンドが返された後まで延期されます(ただし、同じディレクトリスコープ内にある必要があります)。
CMake 3.19以降を使用している場合、ターゲットの確定は自動的に現在のディレクトリスコープの最後まで延期されます。これにより、呼び出し元は、作成されたターゲットが最終化される前に、そのプロパティを変更することができます。CMake 3.19 より前のバージョンを使用する場合、自動延期はサポートされません。その場合、ターゲットの最終化は、このコマンドが戻る直前に実行されます。
CMake のバージョンに関係なく、MANUAL_FINALIZATION
キーワードを指定することで、後で自分で明示的にqt_finalize_target() を呼び出すことを示すことができます。一般的に、MANUAL_FINALIZATION
は、プロジェクトが CMake 3.18 以前をサポートする必要がない限り、必要ありません。
CMake 3.19 以降を使用している場合、プロジェクトのファイナライズは自動的に行われます。古いバージョンのCMakeを使用している場合は、ルートCMakeLists.txt
ファイルの最後で、qt_finalize_project() を手動で呼び出す必要があります。これは特にAndroidをターゲットにしている場合に重要で、デプロイの目的でプロジェクトターゲット間の依存関係を収集します。
例
以下の単純なケースでは、最終化は自動的に処理されます。3.19より前のCMakeバージョンを使用している場合、最終化は呼び出しの一部として即座に実行されます。CMake 3.19 以降を使用している場合、最終化は現在のディレクトリスコープの最後で行われます。
qt_add_executable(simpleapp main.cpp)
次の例は、最終化を延期しなければならないシナリオを示しています。OUTPUT_NAME
targetプロパティはAndroid上のデプロイメント設定に影響を与えますが、これらの設定はターゲットのファイナライズの一部として書き出されます。3.19より前のCMakeバージョンの使用をサポートするために、MANUAL_FINALIZATION
キーワードを追加することで、ターゲットの最終化の責任を引き継ぎます。
qt_add_executable(complexapp MANUAL_FINALIZATION complex.cpp) set_target_properties(complexapp PROPERTIES OUTPUT_NAME Complexify) qt_finalize_target(complexapp)
警告 あなたのAndroidプロジェクトが3.19より低いCMakeバージョンを使用してビルドされている場合は、トップレベルのCMakeLists.txtの最後にqt6_finalize_project()を呼び出していることを確認してください。
qt_finalize_target(),qt_set_finalizer_mode(),qt_add_library(),qt_finalize_project()も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。