📢 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]]