Clazy チェックを使って C++ アプリケーションを Qt 6 に移植する

アプリケーションを Qt 5 から Qt 6 に移植するために、Clazy フレームワークにいくつかのチェックと修正機能を実装しました。彼らの言葉を借りると「Clazy は clang が Qt のセマンティクスを理解できるようにするコンパイラプラグインです。Clazy(https://invent.kde.org/sdk/clazy) を入手して、Qt 6 への移植をよりスムーズにしましょう。

Clazy のチェックは、プラグインとしてコンパイル中に実行するか、clazy-standalone を使って JSON コンパイルデータベース上で実行することができます。修正はclang-apply-replacements を使って後で適用されます。

Qt 6 への移植に特化した Clazy チェック

以下のチェックは、Qt 5 から Qt 6 への移植を容易にするためのものです。

  • qt6-deprecated-api-fixes
  • qt6-header-fixes
  • qt6-qhash-signature
  • qt6-fwd-fixes
  • missing-qobject-macro

チェックは Qt 5 に対して実行する必要があります。修正されたコードは Qt 6 に対してのみコンパイルされます。このため、上記のチェックは一度に実行する必要があります。Clazy では、修正を適用する際の競合を避けるために、一度に一つのテストを実行することを推奨していますが、プラグインとしてこれらのチェックを実行する場合には、このオプションはありません。

Clazyのチェックを適用する方法

Clazyで実行するためのプロジェクトの設定方法、チェックの選択と適用方法については、https://invent.kde.org/sdk/clazy#setting-up-your-project-to-build-with-clazy。

チェックをプラグインとしてではなく、JSONコンパイルデータベース上で実行したい場合は、clazy-standalonehttps://invent.kde.org/sdk/clazy#clazy-standalone-and-json-database-support

簡単に言うと、最新のClazyがインストールされていると仮定して、チェックをプラグインとして実行するために必要なことを以下に説明します。

Clazyで実行するようにプロジェクトをセットアップします。

qmakeを使う場合

お使いのOSに合わせて、qmakeコマンドに以下の行を追加します:

-spec linux-clang QMAKE_CXX="clazy"
-spec macx-clang QMAKE_CXX="clazy"

MSVCのWindowsの場合は、QMAKE_CXX="clazy-cl.bat" を追加します。

qmakeを実行します。

CMakeを使う場合

cmake コマンドに-DCMAKE_CXX_COMPILER=clazy を追加します。

cmakeを実行する。

チェックを選択する:

export CLAZY_CHECKS="qt6-deprecated-api-fixes,qt6-header-fixes,
qt6-qhash-signature,qt6-qlatin1stringchar-to-u,qt6-fwd-fixes,missing-qobject-macro"

fixitsを有効にする:

export CLAZY_EXPORT_FIXES=ON

Clazyが無視するディレクトリを設定する:

export CLAZY_IGNORE_DIRS=.*lib_dir.*

これにより、ライブラリのファイルに対してClazyのチェックが実行されなくなります。これは、ライブラリのパスが-isystem-framework ではなく-I-F に含まれている場合に必要です。また、チェックのトリガーとなるヘッダーがインクルードされたライブラリのファイルに含まれている場合、qt-header-fixes のチェックによる警告を避けるためにも必要です。

コードをコンパイルしてください。

コンパイル時に、ソース・ファイルの隣に.yaml ファイルが作成されます。

修正を適用するには、次のコマンドを実行してください:

clang-apply-replacements <path_to_yaml_files>

これによりソース・ファイルが変更されるので、コードのバックアップを取ることを検討してください。

もしfixitsの間に矛盾があれば、あなたに通知され、ファイルは変更されません。

すべての移植が自動修正でできるわけではありません。手動で変更しなければならないコードについては、コンパイル時の警告をよく見てください。

Qt Creator 内で Clazy チェックを適用する方法

Qt Creator 内で Clazy チェックにアクセスするには、Tools >Options >Analyzer (macOS ではQt Creator >Preferences >Analyzer ) を選択します。

独自の設定を作成し、Qt Creator バージョン 4.14.1 以降の Level 2 および Manual Level セクションにある移植専用の Clazy チェックを選択する必要があります。qt6フィルタを使用すると、ほとんどのチェックを見つけることができます。上記のリストにあるチェックのみを選択するように注意してください。

"Filtering Qt 6 checks"

注意: 修正を適用しやすくし、不要な競合を避けるため、移植チェック以外のチェックはすべて選択解除することをお勧めします。

チェックを実行するには、Analyze >Clang-Tidy and Clazy を選択します。

Clazy チェックの設定と実行の詳細については、Qt Creator を参照してください:Clang ツールの使用」を参照してください。

注意事項

Qt Creator 内では、fixit 間のコンフリクトは警告されません。同じ行に複数のfixitがある場合は、fixitを適用するときに注意してください。

なぜなら、新しいコードは Qt 6 に対してのみコンパイルされるからです。

なぜなら、新しいコードは Qt 6 に対してのみコンパイルされるからです 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。