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.h
と mywidget.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.h
とmywidget.cpp
にSKIP_AUTOUIC
プロパティを設定します。このプロパティにより、これらのファイルは AUTOUIC 処理から除外されます。- この例では、
mywidget.h
とmywidget.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 以降でのみ使用できます。