「CMake - Qtコマンド」の版間の差分
(ページの作成:「== 概要 == <br><br> == Qt6 CoreのCMakeコマンド == ==== Qt6 CoreのCMakeコマンド一覧 ==== 下表のCMakeコマンドは、Qt6::Coreが読み込まれた時に定義される。<br> <syntaxhighlight lang="cmake"> find_package(Qt6 REQUIRED COMPONENTS Core) </syntaxhighlight> <br> <center> {| class="wikitable" | style="background-color:#fefefe;" |+ Qt6 CoreのCMakeコマンド |- ! style="background-color:#66CCFF;" | CMakeコマンド ! style="backgrou…」) |
編集の要約なし タグ: 差し戻し済み |
||
159行目: | 159行目: | ||
**: <br> | **: <br> | ||
**: qt_add_resourcesコマンドは、特殊ターゲットの名前を指定された変数に格納する。 | **: qt_add_resourcesコマンドは、特殊ターゲットの名前を指定された変数に格納する。 | ||
<br><br> | |||
== バージョンレスコマンド == | |||
Qt 5.15以降、Qtモジュールはバージョンレスのコマンドも提供している。<br> | |||
例えば、Qt5とQt6のどちらを使用していても、<code>qt_add_translation</code>コマンドを使用して、翻訳ファイルをコンパイルすることができる。<br> | |||
<br> | |||
最初の<code>find_package</code>コマンドの実行の前に、<code>QT_NO_CREATE_VERSIONLESS_FUNCTIONS</code>を設定して、バージョンレスコマンドの作成を防ぐ。<br> | |||
<br> | |||
* <code>QT_NO_CREATE_VERSIONLESS_FUNCTIONS</code> | |||
*: qt_で始まるコマンドを非表示にして、qt6_で始まるバージョン管理されたコマンドのみを残す。 | |||
<br> | |||
このマクロを定義することで、Qtのバージョン付きのシンボルのみが使用されるようになる。<br> | |||
これは、特にQtの異なるバージョンを混在させる場合や明示的にバージョン管理を行う場合に有用である。<br> | |||
<br> | |||
以下の例では、<code>find_package</code>コマンドの前に<code>set</code>コマンドで<code>QT_NO_CREATE_VERSIONLESS_FUNCTIONS</code>を<code>TRUE</code>に設定している。<br> | |||
これにより、Qtのバージョンなしのシンボルが生成されないようになる。<br> | |||
CMake 3.16以降が必要な場合があるため、<code>cmake_minimum_required</code>コマンドを適切に設定する必要がある。<br> | |||
<syntaxhighlight lang="cmake"> | |||
cmake_minimum_required(VERSION 3.16) | |||
# Set QT_NO_CREATE_VERSIONLESS_FUNCTIONS before calling find_package | |||
set(QT_NO_CREATE_VERSIONLESS_FUNCTIONS TRUE) | |||
project(MyQtProject) | |||
# 使用するQtライブラリ | |||
find_package(Qt6 REQUIRED COMPONENTS Core Widgets) | |||
# 実行ファイルのソースファイルおよびヘッダファイル | |||
add_executable(MyApp main.cpp) | |||
# Qtライブラリのリンク | |||
target_link_libraries(MyApp Qt6::Core Qt6::Widgets) | |||
</syntaxhighlight> | |||
<br><br> | |||
== バージョンレスターゲット == | |||
* <code>QT_NO_CREATE_VERSIONLESS_TARGETS</code> | |||
*: Qt::で始まるインポートされたターゲットを隠す。 | |||
*: 代わりに、Qt6::で始まるターゲットを使用する必要がある。 | |||
<br><br> | <br><br> | ||
2024年6月24日 (月) 04:45時点における版
概要
Qt6 CoreのCMakeコマンド
Qt6 CoreのCMakeコマンド一覧
下表のCMakeコマンドは、Qt6::Coreが読み込まれた時に定義される。
find_package(Qt6 REQUIRED COMPONENTS Core)
CMakeコマンド | 説明 |
---|---|
qt_add_big_resources | 大きなバイナリリソースをオブジェクトコードにコンパイルする。 |
qt_add_binary_resources | QtリソースファイルのリストからRCCファイルを生成する。 |
qt_add_executable | プラットフォーム固有のタイプのアプリケーションターゲットを生成および確定する。 |
qt_add_library | ライブラリを生成および確定する。 |
qt_add_plugin | Qtプラグインターゲットを生成する。 |
qt_add_resources | バイナリリソースをソースコードにコンパイルする。 |
qt_allow_non_utf8_sources | ソースファイルがWindows用のUTF-8として強制的に扱われるのを防ぐ。 |
qt_android_add_apk_target | androiddeployqtを実行して、APKを生成するビルドターゲットを定義する。 |
qt_android_apply_arch_suffix | ターゲットバイナリの名前にアーキテクチャ固有のサフィックスを含めるように設定する。 |
qt_android_generate_deployment_settings | androiddeployqtが必要とするデプロイ設定ファイルを生成する。 |
qt_deploy_qt_conf | デプロイ時に、qt.confファイルを書き込む。 |
qt_deploy_runtime_dependencies | 実行ファイルに必要なQtプラグイン、Qtライブラリ、非Qtライブラリをデプロイする。 |
qt_deploy_translations | 実行ファイルが必要とするQtの翻訳をデプロイする。 |
qt_disable_unicode_defines | ユニコード関連のコンパイラ定義がターゲット上で自動的に設定されるのを防ぐ。 |
qt_extract_metatypes | Qtターゲットからmetatypesを抽出して、関連するmetatypes.jsonファイルを生成する。 |
qt_finalize_project | Qtプロジェクトに関連するプラットフォーム固有のタスクを処理する。 |
qt_finalize_target | Qtターゲットに関連するプラットフォーム固有のタスクを処理する。 |
qt_generate_deploy_app_script | アプリケーションのデプロイスクリプトを生成する。 |
qt_generate_deploy_script | カスタムデプロイスクリプトを生成する。 |
qt_generate_moc | 入力ファイルに対して、mocを呼び出す。 |
qt_import_plugins | インポートあるいは除外するプラグインのカスタムセットを指定する。 |
qt_policy | QtのCMake APIのデフォルトの振る舞いを変更する。 |
qt_set_finalizer_mode | ターゲットのファイナライズをカスタマイズする。 |
qt_standard_project_setup | プロジェクト全体のデフォルトを標準的な配置に設定する。 |
qt_wrap_cpp | ソースからmocファイルを生成する。 |
qt_add_resources / qt6_add_resources
バイナリリソースをソースコードにコンパイルするコマンドである。
リソースを追加するには、コマンドの第1引数に変数名かターゲットを渡す。
第1引数に変数名を渡すと、qt_add_resourcesコマンドはリソースコンパイラ(rcc)を使用してQtリソースファイルからソースコードを生成する。
生成されたソースファイルへのパスは、<VAR>に追加される。
第1引数としてターゲットを渡すと、関数は指定された<FILES>を含む<RESOURCE_NAME>という名前のリソースを生成する。
リソースは自動的に<TARGET>にリンクされる。
Qtリソースの詳細を知りたい場合は、Qtの公式ドキュメントを参照すること。
# Qt 5
qt_add_resources(<VAR> file1.qrc file2.qrc ...
[OPTIONS ...])
# Qt 6
qt_add_resources(<TARGET> <RESOURCE_NAME>
[PREFIX <PATH>]
[LANG <LANGUAGE>]
[BASE <PATH>]
[BIG_RESOURCES]
[OUTPUT_TARGETS <VARIABLE_NAME>]
[FILES ...] [OPTIONS ...]
)
# Qt 6 (バージョンレスコマンドが無効になっている場合)
qt6_add_resources(<TARGET> <RESOURCE_NAME>
[PREFIX <PATH>]
[LANG <LANGUAGE>]
[BASE <PATH>]
[BIG_RESOURCES]
[OUTPUT_TARGETS <VARIABLE_NAME>]
[FILES ...] [OPTIONS ...]
)
# 使用例
# .qrcファイルを使用した変数を使用する場合
set(SOURCES main.cpp)
qt_add_resources(SOURCES
example.qrc
)
qt_add_executable(<プロジェクト名>
${SOURCES}
)
# 即時リソースを使用してターゲット名を指定する場合
qt_add_executable(<プロジェクト名>
main.cpp
)
qt_add_resources(<プロジェクト名> "images"
PREFIX "/images"
FILES image1.png image2.png
)
- ターゲット名を指定する場合のバリアントの引数
- <PREFIX>
- このリソースの全てのファイルが、C++ソースコードからアクセスできるようにするためのパス接頭辞を指定する。
- これは、.qrcファイル形式のXML属性プレフィックスに対応する。
- <PREFIX>を指定しない場合、ターゲットプロパティQT_RESOURCE_PREFIXが使用される。
- Qt 6.5以降、PREFIXはオプションである。
- もし、PREFIXが省略されて、かつ、QT_RESOURCE_PREFIXで指定しない場合は、"/"がデフォルトのパス接頭辞として使用される。
- <LANG>
- このリソースのロケールを指定する。
- これは、.qrcファイル形式のXML属性langに対応する。
- <BASE>
- ファイルのエイリアスのルートポイントを示すパスプレフィックスである。
- 例えば、<BASE>が"assets"、<FILES>が"assets/images/logo.png"の場合、そのファイルのエイリアスは、"images/logo.png"となる。
- ファイルのエイリアス設定は、<QT_RESOURCE_ALIAS>ソースファイルプロパティで設定する必要がある。
- BIG_RESOURCES
- ビッグリソースのサポートを有効にできる。
- これは、C++ソースコードの代わりにオブジェクト・ファイル (.o .obj) を直接生成する。
- これにより、生成されたC++ソースをコンパイルすることなく、より大きなリソースを埋め込むことができる。
- <BIG_RESOURCES>は、CMakeのXcodeプロジェクトジェネレータの制限によりiOSと互換性が無いことに注意する。
- また、<BIG_RESOURCES>は、CMake 3.17以降でのみ動作する。
- 静的ライブラリでこのコマンドを使用する場合、1つ以上の特別なターゲットが生成される。
- これらのターゲットに対して追加の処理を行う場合は、<OUTPUT_TARGETS>パラメータに変数名を渡す。
- qt_add_resourcesコマンドは、特殊ターゲットの名前を指定された変数に格納する。
- <PREFIX>
バージョンレスコマンド
Qt 5.15以降、Qtモジュールはバージョンレスのコマンドも提供している。
例えば、Qt5とQt6のどちらを使用していても、qt_add_translation
コマンドを使用して、翻訳ファイルをコンパイルすることができる。
最初のfind_package
コマンドの実行の前に、QT_NO_CREATE_VERSIONLESS_FUNCTIONS
を設定して、バージョンレスコマンドの作成を防ぐ。
QT_NO_CREATE_VERSIONLESS_FUNCTIONS
- qt_で始まるコマンドを非表示にして、qt6_で始まるバージョン管理されたコマンドのみを残す。
このマクロを定義することで、Qtのバージョン付きのシンボルのみが使用されるようになる。
これは、特にQtの異なるバージョンを混在させる場合や明示的にバージョン管理を行う場合に有用である。
以下の例では、find_package
コマンドの前にset
コマンドでQT_NO_CREATE_VERSIONLESS_FUNCTIONS
をTRUE
に設定している。
これにより、Qtのバージョンなしのシンボルが生成されないようになる。
CMake 3.16以降が必要な場合があるため、cmake_minimum_required
コマンドを適切に設定する必要がある。
cmake_minimum_required(VERSION 3.16)
# Set QT_NO_CREATE_VERSIONLESS_FUNCTIONS before calling find_package
set(QT_NO_CREATE_VERSIONLESS_FUNCTIONS TRUE)
project(MyQtProject)
# 使用するQtライブラリ
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
# 実行ファイルのソースファイルおよびヘッダファイル
add_executable(MyApp main.cpp)
# Qtライブラリのリンク
target_link_libraries(MyApp Qt6::Core Qt6::Widgets)
バージョンレスターゲット
QT_NO_CREATE_VERSIONLESS_TARGETS
- Qt::で始まるインポートされたターゲットを隠す。
- 代わりに、Qt6::で始まるターゲットを使用する必要がある。