12,964
回編集
(ページの作成:「== 概要 == Qt 5およびQt 6のCMakeコマンドのセマンティクスは、ほぼ互換性がある。<br> しかし、Qt 5.14以前では、インポートされたQtライブラリのターゲットとコマンドは、全て名前の一部としてバージョン番号を含んでいた。<br> <br> そのため、Qt 5とQt 6の両方で動作するCMakeコマンドを記述することは煩雑であった。<br> <br> Qt 5.15以降では、バージョンレ…」) |
|||
124行目: | 124行目: | ||
同様に、インポートするQtライブラリ名も指定することができる。<br> | 同様に、インポートするQtライブラリ名も指定することができる。<br> | ||
<code>target_link_libraries</code>コマンドにQt${QT_VERSION_MAJOR}::Widgetsと記述することにより、Qt5::WidgetsまたはQt6::Widgetsのいずれかのライブラリをリンクすることができる。<br> | <code>target_link_libraries</code>コマンドにQt${QT_VERSION_MAJOR}::Widgetsと記述することにより、Qt5::WidgetsまたはQt6::Widgetsのいずれかのライブラリをリンクすることができる。<br> | ||
<br><br> | |||
== 推奨事項 == | |||
* 可能であれば、CMakeコマンドのバージョンレスバリアントを使用する。 | |||
* 同じプロジェクトでQt 5およびQt 6をサポートする必要がある場合を除き、バージョン付きのターゲットを使用する。 | |||
* バージョンレスターゲットを使用しなければならない場合は、[[CMake_-_Qt5_/_Qt6の互換性#バージョンレスターゲットのデメリット|バージョンレスターゲットを使用する際のデメリット]]に注意する。 | |||
* Qt 5.15より古いバージョンのQt 5をサポートする必要がある場合や、<br><code>QT_NO_CREATE_VERSIONLESS_FUNCTIONS</code>や<code>QT_NO_CREATE_VERSIONLESS_TARGETS</code>が定義されているコンテキストでCMakeコードがロードされるかどうかを制御できない場合は、<br>バージョン管理されたバージョンのCMakeコマンドやターゲットを使用する。<br><br>この場合でも、変数を通して実際のコマンド名やターゲット名を決定することにより、コードを簡素化することができる。 | |||
<br><br> | |||
== バージョンレスターゲットのデメリット == | |||
バージョンレスターゲットには、いくつかのデメリットがある。<br> | |||
<br> | |||
バージョンレスターゲットはALIASターゲットであり、バージョン付きターゲットのターゲットプロパティが無い。<br> | |||
<br> | |||
プロジェクトは、バージョンレスターゲットを公開するターゲットをエクスポートしてはならない。<br> | |||
例えば、他のプロジェクトにより消費されるライブラリは、バージョンレスターゲットに対して公にリンクするターゲットをエクスポートしてはならない。<br> | |||
これは、推移的依存関係が壊れたり、そのライブラリのユーザがQt 5とQt 6のターゲットを不本意に混在させたりする可能性がある。<br> | |||
<br><br> | |||
== WindowsのUnicodeサポート == | |||
Qt 6では、Qtモジュールに対してリンクするターゲットに対して、<code>UNICODE</code>と<code>_UNICODE</code>コンパイラ定義がデフォルトで有効化されている。<br> | |||
これは、qmakeコマンドの動作と同様であるが、Qt 5のCMake APIの動作と差異がある。<br> | |||
<br> | |||
ターゲット上において、<code>qt_disable_unicode_defines</code>コマンドを実行して、<code>UNICODE</code>と<code>_UNICODE</code>コンパイラ定義を無効にする。<br> | |||
<syntaxhighlight lang="cmake"> | |||
find_package(Qt6 COMPONENTS Core) | |||
add_executable(myApp | |||
# ...略 | |||
) | |||
qt_disable_unicode_defines(myApp) | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||