Qt Visual Studio 統合を使用して、新しい Qt クラスを追加すると、2 つの別個の moc.exe 生成ファイルが追加されます。それでも、最終的に生成される 2 つのファイルは同じように見えます。
一方、UI クラスを追加する場合、uic.exe によって生成されたファイルにはこの分離がなく、すべての構成で同じファイルになります。
構成ごとに個別の moc ファイルが必要な理由を知っている人はいますか? 2つの違いはいつですか?
Qt Visual Studio 統合を使用して、新しい Qt クラスを追加すると、2 つの別個の moc.exe 生成ファイルが追加されます。それでも、最終的に生成される 2 つのファイルは同じように見えます。
一方、UI クラスを追加する場合、uic.exe によって生成されたファイルにはこの分離がなく、すべての構成で同じファイルになります。
構成ごとに個別の moc ファイルが必要な理由を知っている人はいますか? 2つの違いはいつですか?
moc出力はユーザー定義のソースコードから生成されるため、デバッグバージョンとリリースバージョンを別々に使用する必要があると思います。したがって、前処理されたクラスソースがデバッグとリリースで異なる場合(たとえば、デバッグビルドにのみ存在するシグナル)、moc出力はデバッグビルドとリリースビルドで異なる可能性があります。
これは、uicで生成されたファイルには適用されません。これらのファイルは.ui XMLから生成され、デバッグ構成とリリース構成の間で変更できないためです。
Mocは、プリプロセッサディレクティブのソースを解析します。したがって、次のようなヘッダーファイルがある場合:
class Test : public QObject
{
Q_OBJECT
public:
Test();
public slots:
#ifndef DEBUG
void Foo();
#endif
};
その場合、スロットFooはリリースビルドにのみ存在し、デバッグビルドには存在しません。Mocは、DEBUG(この場合)シンボルが設定されているかどうかに応じて、異なるmoc.cppファイルを生成します。