CMake: SKIP_AUTOUICプロパティでソースファイルのAUTOUIC処理を賢く除外


SKIP_AUTOUIC プロパティは、Qt プロジェクトにおいて、特定のソースファイルを Qt UI コンパイラ (AUTOUIC) による処理から除外するために使用されます。AUTOUIC は、Qt GUI デザイナーで作成された .ui ファイルを C++ コードに変換するツールです。

用途

以下の状況で SKIP_AUTOUIC プロパティが役立ちます。

  • AUTOUIC による処理で問題が発生する場合
  • 手動で C++ コードを生成したい場合
  • 特定のソースファイルを GUI レイアウトと関連付けたくない場合

設定方法

SKIP_AUTOUIC プロパティは、以下のコマンドを使用して設定できます。

set_property(SOURCE <source_file> PROPERTY SKIP_AUTOUIC ON)

<source_file> は、除外したいソースファイルのパスを指定します。このコマンドは、C++ ヘッダーファイル、ソースファイル、および .ui ファイルに対して使用できます。

以下の例は、mywidget.hmywidget.cpp というヘッダーファイルとソースファイルを AUTOUIC 処理から除外する方法を示します。

set_property(SOURCE mywidget.h PROPERTY SKIP_AUTOUIC ON)
set_property(SOURCE mywidget.cpp PROPERTY SKIP_AUTOUIC ON)

注意点

  • AUTOUIC 処理から除外されたソースファイルは、手動で C++ コードに変換する必要があります。
  • .ui ファイルに SKIP_AUTOUIC プロパティを設定する場合、対応する C++ ヘッダーファイルにも設定する必要があります。
  • SKIP_AUTOUIC プロパティは、CMake バージョン 3.8 以降でのみ使用できます。

SKIP_AUTOUIC プロパティは、より広範なソースファイル除外機能である SKIP_AUTOGEN プロパティの一部です。SKIP_AUTOGEN プロパティは、AUTOUIC だけでなく、AUTOMOC と AUTORCC 処理からもソースファイルを除外できます。

set_property(SOURCE <source_file> PROPERTY SKIP_AUTOGEN ON)


例 1: 特定のソースファイルを AUTOUIC 処理から除外する

cmake_minimum_required(VERSION 3.8)

project(MyProject)

set(SOURCE_FILES mywidget.h mywidget.cpp)

# mywidget.h と mywidget.cpp を AUTOUIC 処理から除外する
set_property(SOURCE mywidget.h PROPERTY SKIP_AUTOUIC ON)
set_property(SOURCE mywidget.cpp PROPERTY SKIP_AUTOUIC ON)

# mywidget.cpp をビルドする
add_executable(MyProject mywidget.cpp)

例 2: SKIP_AUTOGEN プロパティを使用して AUTOUIC、AUTOMOC、AUTORCC 処理からソースファイルを除外する

cmake_minimum_required(VERSION 3.8)

project(MyProject)

set(SOURCE_FILES mywidget.h mywidget.cpp)

# mywidget.h と mywidget.cpp を AUTOUIC、AUTOMOC、AUTORCC 処理から除外する
set_property(SOURCE mywidget.h PROPERTY SKIP_AUTOGEN ON)
set_property(SOURCE mywidget.cpp PROPERTY SKIP_AUTOGEN ON)

# mywidget.cpp をビルドする
add_executable(MyProject mywidget.cpp)

説明

例 1

  • add_executable コマンドを使用して、mywidget.cpp から実行可能ファイルを作成します。
  • set_property コマンドを使用して、mywidget.hmywidget.cppSKIP_AUTOUIC プロパティを設定します。このプロパティにより、これらのファイルは AUTOUIC 処理から除外されます。
  • この例では、mywidget.hmywidget.cpp というヘッダーファイルとソースファイルをプロジェクトに追加します。

例 2

  • SKIP_AUTOGEN プロパティは、SKIP_AUTOUIC プロパティよりも汎用性が高く、AUTOUIC だけでなく、AUTOMOC と AUTORCC 処理からもソースファイルを除外できます。
  • この例は、例 1 と似ていますが、SKIP_AUTOGEN プロパティを使用して AUTOUIC、AUTOMOC、AUTORCC 処理からソースファイルを除外します。

これらの例は、SKIP_AUTOUIC プロパティと SKIP_AUTOGEN プロパティの基本的な使用方法を示しています。これらのプロパティの詳細については、CMake ドキュメントを参照してください。

  • 実際のプロジェクトでは、より複雑な構成が必要になる場合があります。
  • 上記の例では、Qt フレームワークをプロジェクトに追加する必要があることを前提としています。


代替方法

以下に、SKIP_AUTOUIC プロパティの代替方法をいくつか紹介します。

.ui ファイルを生成しない

最も簡単な代替方法は、そもそも .ui ファイルを生成しないことです。これは、Qt GUI デザイナーを使用せずに、手動で C++ コードを生成する場合に有効です。

QDesignerPlugin を使用しない

QDesignerPlugin は、Qt Creator などの IDE で Qt GUI デザイナーを統合するために使用されます。QDesignerPlugin を使用しない場合は、AUTOUIC は自動的に呼び出されません。

カスタムの UI ビルドツールを使用する

CMake 以外のビルドツールを使用している場合は、カスタムの UI ビルドツールを使用して .ui ファイルを処理することができます。

QResource クラスを使用する

QResource クラスを使用すると、 .ui ファイルをバイナリリソースとして埋め込むことができます。これにより、AUTOUIC は必要ありません。

プラグインアーキテクチャを使用する

プラグインアーキテクチャを使用している場合は、UI をプラグインとして実装することができます。これにより、AUTOUIC を個別に設定する必要がなくなります。

最適な方法の選択

最適な方法は、プロジェクトの要件によって異なります。

  • プラグインアーキテクチャを使用している場合は、UI をプラグインとして実装することができます。
  • .ui ファイルを埋め込む必要がある場合は、QResource クラスを使用することができます。
  • カスタムのビルドツールを使用している場合は、カスタムの UI ビルドツールを使用することができます。
  • Qt Creator などの IDE を使用している場合は、QDesignerPlugin を使用しないように設定することができます。
  • .ui ファイルを生成しない場合は、それが最も簡単な方法です。
  • AUTOUIC 処理から除外されたソースファイルは、手動で C++ コードに変換する必要があります。
  • .ui ファイルに SKIP_AUTOUIC プロパティを設定する場合、対応する C++ ヘッダーファイルにも設定する必要があります。
  • SKIP_AUTOUIC プロパティは、CMake バージョン 3.8 以降でのみ使用できます。