Qtを使い始めたところ、独自のmakeツールqmakeを使用していることに気付きました。
- Qtが独自のmakeツールを使用するのはなぜですか?
- 標準のmakeツールを使用できないようにする特別なものはありますか?
- qmakeはGCCC++コンパイラを呼び出しますか?
Qtはqmakeを使用して、「moc、メタオブジェクトコンパイラ」(信号とスロットを提供)、「uic、uiコンパイラ」(.uiデザイナーファイルからヘッダーファイルを作成)、「rcc」など、Qtのさまざまなアドオンを透過的にサポートします。リソースコンパイラ」(リソースをコンパイルします)。
必要なビルドシステムの使用を止めるものは何もありません。ただし、それはもっと多くの作業です。たとえば、シグナルまたはスロットを持つクラスを含むすべてのヘッダーファイルに対して「moc」を実行する必要があります。一般的に、特にQtを使い始めたばかりの人にはお勧めしません。
QMakeはg++/gccを直接呼び出しません。代わりに、qmakeは現在のプラットフォームでネイティブmakeファイルを作成します。Linuxでは標準のGNUmakeファイルを作成し、Windowsではビジュアルスタジオのmakeファイルを生成でき、MacOSXではXCodeプロジェクトファイルを生成できます。次に、ネイティブビルドシステム(GNU make、MS NMake、xcodebuildなど)を呼び出します。これにより、ネイティブコンパイラ(g ++ / gccなど)が呼び出されます。
私の意見では、qmakeは単純なプロジェクト(qmake -project; qmake; makeだけでもかまいません)にはかっこいいですが、恐ろしく、大規模なプロジェクトには十分に文書化されていません。特にqmakeのconfigure機能は冗談です。
私が知っている最高のビルドシステムは、CMakeとWaf(Pythonベース)です。私自身のQtプロジェクトでは、CMakeを使用して仕事をしています。KDEのように-みんな:)
シグナル/スロットシステムをサポートするために、Qtは、処理の多くを実行する中間オブジェクトを生成する特別なプリプロセッサとコンパイラに依存しています。彼らはこれをメタオブジェクトコンパイラまたはMOCと呼んでいます。
詳細については、Qt 5ドキュメント:メタオブジェクトコンパイラの使用を参照してください。
qmake
MOC(および他のいくつかの中間ツール)は、 ;と連携して機能します。MOCによって生成された中間ファイルとすべてのソースファイルを最終的な実行可能ファイルにビルドする、ネイティブ形式(VC ++、g ++など)のMakefileを生成するビルド自動化ツール。
qmakeは、クロスプラットフォームで柔軟になるように設計されています。MicrosoftVisualStudioおよびXcodeと互換性があります。
すべてはqmakeマニュアルにあります。
qmakeは、プロジェクトファイルの情報に基づいてMakefileを生成します。プロジェクトファイルは開発者によって作成され、通常は単純ですが、複雑なプロジェクト用にさらに高度なプロジェクトファイルを作成できます。qmakeには、Qtを使用した開発をサポートする追加機能が含まれており、mocおよびuicのビルドルールが自動的に含まれます。qmakeは、開発者がプロジェクトファイルを変更しなくても、MicrosoftVisualStudio用のプロジェクトを生成することもできます。
順番に
a)それはあなたのために舞台裏でたくさんするので
b)はい、a)を参照してください
c)はい、g ++を呼び出します(ただし、他のコンパイラーがあればサポートできます)
ちなみに、これはQt5.xが含まれるまで当てはまりました。Qt6は代わりにCMakeに切り替えています。少なくともQt自体を構築する場合は、qmakeではなくcmakeがQtアプリケーション自体を構築するために推奨されることを期待するのは妥当なようです。特に、リードqmake開発者がQtCompanyで働いていないためです。最後に、社内ツールではなく業界標準ツール:-)