|
|
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>
| |
|
| |
| == バージョンレスターゲット ==
| |
| 既存のインポートターゲットに加えて、Qt 5.15以降ではバージョンレスターゲットが使用できる。<br>
| |
| 例えば、Qt Coreライブラリとリンクする場合、Qt6::CoreとQt::Coreの両方を参照することができる。<br>
| |
| <br>
| |
| バージョンレスターゲットはデフォルトで定義されている。<br>
| |
| バージョンレスターゲットを無効にする場合は、最初の<code>find_package</code>コマンドの実行前に、<code>QT_NO_CREATE_VERSIONLESS_TARGETS</code>を設定する必要がある。<br>
| |
| <br>
| |
| * <code>QT_NO_CREATE_VERSIONLESS_TARGETS</code>
| |
| *: Qt::で始まるインポートされたターゲットを隠す。
| |
| *: 代わりに、Qt6::で始まるターゲットを使用する必要がある。
| |
| <br>
| |
| <u>※注意</u><br>
| |
| <u>例えば、インポートされたQt::Coreターゲットには、Qt6::Coreターゲットで利用可能なターゲットプロパティは無いことに注意する。</u><br>
| |
| <br>
| |
| 以下の例では、まず、Qt6ライブラリを探索する。<br>
| |
| 探索に失敗した場合は、Qt 5.15ライブラリを探索する。<br>
| |
| これにより、Qt 5 / 6に関係なく、インポートされたQt::Coreターゲットを使用することができる。<br>
| |
| <syntaxhighlight lang="cmake">
| |
| find_package(Qt6 COMPONENTS Core)
| |
| if (NOT Qt6_FOUND)
| |
| find_package(Qt5 5.15 REQUIRED COMPONENTS Core)
| |
| endif()
| |
|
| |
| add_executable(myApp
| |
| # ...略
| |
| )
| |
|
| |
| target_link_libraries(myApp PRIVATE Qt::Core)
| |
| </syntaxhighlight>
| |
| <br><br> | | <br><br> |
|
| |
|