13,007
回編集
335行目: | 335行目: | ||
また、Qtプロジェクトによっては、特定のUIファイルのみを処理したい場合がある。<br> | また、Qtプロジェクトによっては、特定のUIファイルのみを処理したい場合がある。<br> | ||
その場合は、この変数<code>CMAKE_AUTOUIC</code>を無効にして手動で制御することも可能である。<br> | その場合は、この変数<code>CMAKE_AUTOUIC</code>を無効にして手動で制御することも可能である。<br> | ||
<br><br> | |||
== set(CMAKE_AUTOMOC ON)コマンド == | |||
変数<code>CMAKE_AUTOMOC</code>は、CMakeにおいてQt Meta-Object Compiler (MOC) の自動実行を制御するための重要な設定である。<br> | |||
<br> | |||
<u>この変数は、ほとんどのQtプロジェクトで必須の設定である。</u><br> | |||
Qtのメタオブジェクトシステムに必要なメタデータを生成するために、MOCを自動的に実行する。<br> | |||
これにより、開発者はQtの高度な機能 (シグナル / スロット、プロパティシステム等) を簡単に利用できるようになり、同時にビルドプロセスも自動化される。<br> | |||
<br> | |||
この機能はCMake 2.8.6以降で利用可能である。<br> | |||
<br> | |||
* 動作 | |||
*: 変数<code>CMAKE_AUTOMOC</code>を有効にする時、CMakeはプロジェクト内のQtクラス (<code>Q_OBJECT</code>マクロを使用しているクラス等) を自動的に検出して、 | |||
*: 必要に応じてMOCを実行する。 | |||
* 処理対象 | |||
** Q_OBJECTマクロを含むヘッダファイル | |||
** シグナルやスロットを使用しているクラス | |||
** プロパティシステムを使用しているクラス | |||
* 利点 | |||
** 手動でMOCの実行を設定する必要がなくなり、開発プロセスが簡素化される。 | |||
** ソースファイルの変更時に自動的にMOC処理が行われる。 | |||
* 生成ファイル | |||
*: moc_*.cppファイルがビルドディレクトリに生成される。 | |||
* 関連する変数 | |||
** <code>CMAKE_AUTOMOC_MACRO_NAMES</code> | |||
**: 追加のマクロ名を指定して、MOC処理の対象を拡張できる。 | |||
** <code>CMAKE_AUTOMOC_PATH_PREFIX</code> | |||
**: 生成されるmocファイルのパスプレフィックスを設定する。 | |||
* パフォーマンスへの影響 | |||
*: 大規模プロジェクトでは、ビルド時間が若干増加する可能性がある。 | |||
* デバッグ | |||
*: 変数<code>CMAKE_AUTOMOC_VERBOSE</code>を有効にする時、MOC処理の詳細なログが出力され、問題のデバッグに役立つ。 | |||
* QtとC++の統合 | |||
*: この変数を有効にすることにより、QtのメタオブジェクトシステムとC++のコードがシームレスに統合される。 | |||
<br> | |||
また、特定のファイルのみMOCを処理をしたい場合は、変数<code>CMAKE_AUTOMOC</code>を無効にして、<code>qt_wrap_cpp()</code>コマンドを使用して手動で制御できる。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>プリコンパイル済みヘッダ (PCH、GCH等) を使用する場合、追加の設定が必要になることがある。</u><br> | |||
<br><br> | <br><br> | ||