web-dev-qa-db-ja.com

Qtが独自のmakeツールであるqmakeを使用するのはなぜですか?

私は Qt を使い始めたところ、独自のmakeツール qmake を使用していることに気付きました。

  • Qtが独自のmakeツールを使用するのはなぜですか?
  • 標準のmakeツールを使用できない特別なものはありますか?
  • Qmakeは [〜#〜] gcc [〜#〜] C++コンパイラを呼び出しますか?
54

Qtはqmakeを使用して、Qtのさまざまなアドオンを透過的にサポートします。たとえば、「moc、メタオブジェクトコンパイラ」(信号とスロットを提供)、「uic、uiコンパイラ」(.uiデザイナーファイルからヘッダーファイルを作成)、「rcc、リソースコンパイラ」(リソースをコンパイルします)。

必要なビルドシステムの使用を止めるものは何もありません。しかし、それははるかに多くの作業です。たとえば、シグナルまたはスロットを持つクラスを含むすべてのヘッダーファイルに対して「moc」を実行する必要があります。一般的には、特にQtを使い始めたばかりの人にはお勧めできません。

QMakeはg ++/gccを直接呼び出しません。代わりに、qmakeは現在のプラットフォームでネイティブのmakeファイルを作成します。 Linuxでは標準のGNU makeファイルを作成し、Windowsではビジュアルスタジオのmakeファイルを生成でき、Mac OS XではXCodeプロジェクトファイルを生成できます。次に、ネイティブビルドシステム(GNU make、MS NMake、またはxcodebuildなど)を呼び出し、ネイティブコンパイラ(g ++/gccなど)を呼び出します。

56
Thomi

私の意見では、qmakeは単純なプロジェクト(たとえば、qmake -project; qmake; makeだけでもかまいません)には優れていますが、ひどいものであり、大規模なプロジェクトには十分に文書化されていません。特にqmakeの構成機能は冗談です。

私が知っている最高のビルドシステムは、CMakeとWaf(Pythonベース)です。私のQtプロジェクトでは、CMakeを使用して仕事をしています。 KDEみんなと同じように:)

8
Game Coder

シグナル/スロットシステムをサポートするために、Qtは特別なプリプロセッサーとコンパイラーに依存して、処理の多くを行う中間オブジェクトを生成します。彼らはこれをMeta-Object Compilerまたは[〜#〜] moc [〜#〜]

詳細は Qt 5ドキュメント:メタオブジェクトコンパイラの使用 を参照してください。

MOCは(他のいくつかの中間ツールとともに)qmakeと連携して機能します。 MOCによって生成された中間ファイルとすべてのソースファイルを最終的な実行可能ファイルにビルドするネイティブフォーマット(VC++、g ++など)でMakefileを生成するビルド自動化ツール。

6
Ron Warholic

qmakeは、クロスプラットフォームで柔軟に設計されています。 Microsoft Visual StudioおよびXcodeと互換性があります。

すべては qmake Manual にあります。

qmakeは、プロジェクトファイルの情報に基づいてMakefileを生成します。プロジェクトファイルは開発者によって作成され、通常は単純ですが、複雑なプロジェクトの場合はより高度なプロジェクトファイルを作成できます。 qmakeには、Qtでの開発をサポートする追加機能が含まれており、mocおよびuicのビルドルールが自動的に含まれます。 qmakeは、開発者がプロ​​ジェクトファイルを変更することなく、Microsoft Visual Studioのプロジェクトを生成することもできます。

5

順番に

a)それはあなたのために舞台裏で多くをするので

b)はい、a)を参照

c)はい、それはg ++を呼び出します(ただし、他のコンパイラがあればサポートできます)

3