📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == Qt 5およびQt 6のCMakeコマンドのセマンティクスは、ほぼ互換性がある。<br> しかし、Qt 5.14以前では、インポートされたQtライブラリのターゲットとコマンドは、全て名前の一部としてバージョン番号を含んでいた。<br> <br> そのため、Qt 5とQt 6の両方で動作するCMakeコマンドを記述することは煩雑であった。<br> <br> Qt 5.15以降では、バージョンレ…」 |
細 文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag… |
||
| (同じ利用者による、間の3版が非表示) | |||
| 6行目: | 6行目: | ||
<br> | <br> | ||
Qt 5.15以降では、バージョンレスターゲットおよびバージョンレスとコマンドを導入しており、異なるQtのバージョンにほとんど依存しないCMakeコマンドが記述できるようになっている。<br> | Qt 5.15以降では、バージョンレスターゲットおよびバージョンレスとコマンドを導入しており、異なるQtのバージョンにほとんど依存しないCMakeコマンドが記述できるようになっている。<br> | ||
<br><br> | |||
== Qt 5 / Qt 6ライブラリの検索 == | |||
システムからQt 5 / Qt 6モジュールを検索する場合、以下に示すように記述する。<br> | |||
これは、Qt 6への移行を容易にしつつ、Qt 5を使用しているシステムとの互換性も維持することができる。<br> | |||
<br> | |||
<syntaxhighlight lang="cmake"> | |||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Network Xml) | |||
</syntaxhighlight> | |||
<br> | |||
# まず、Qt 6モジュールを探す。 | |||
# Qt 6モジュールが見つからない場合、Qt 5モジュールを探す。 | |||
# いずれかが存在する場合、該当するバージョンのCore、Network、Xmlコンポーネントを探す。 | |||
# REQUIREDフラグがあるため、どちらのバージョンも存在しない場合はエラーになる。 | |||
<br> | |||
つまり、システムにQt 6とQt 5の両方がインストールされている場合、Qt 6が優先して使用される。<br> | |||
<br><br> | <br><br> | ||
| 126行目: | 142行目: | ||
<br><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> | |||
ターゲット上において、[[CMake_-_Qtコマンド#qt_disable_unicode_definesコマンド|<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> | |||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] | ||