web-dev-qa-db-ja.com

CMakeとqmakeの違いと類似点は何ですか?

qmakeを介した特定のプロジェクトでCMakeを使用する理由、またはその逆

両方のビルドシステムの長所と短所は何ですか?検索していくつかのドキュメントを見つけましたが、理解するのが難しいと感じました。

31
Hareen Laks

どちらもビルドシステムですが、あまり似ていません。プロジェクトでQtを使用している場合は、おそらくqmakeを使用するのが最善です。 CMakeはより汎用的であり、ほぼすべてのタイプのプロジェクトに適合します。

QmakeとCMakeは両方とも Makefile を生成し、makeによって読み取られてプロジェクトをビルドします。すべてのビルドシステムがMakefileを生成するわけではありませんが、多くのシステムが生成します。 Makefileでさえ、ビルドシステムの一種です。実行可能ファイル(または動的ライブラリまたは静的ライブラリ)を作成するために、コンパイラとリンカに何をするかを指示します。


プロジェクトでQtを使用しているが、qmakeを使用したくない場合は、さらにいくつかのことを自分で行う必要があります。

  • メタオブジェクトコンパイラ (MOC)の実行
  • パスを含める(コンパイラにQtヘッダーを探す場所を教えてください)
  • リンク(Qtライブラリを探す場所をリンカーに伝えます)

そのため、qmakeを使用せずにQtプロジェクトを構築するにはもう少し作業が必要ですが、それは可能であり、Qtとqmakeがどのように処理するかについて多くを教えてくれます。

個人的な注意として(これは推奨事項としてのみ、自分でさらに調査してください):私はqmakeの大ファンではありません。これはQtの処理に役立ちますが、それとは別に、かなり制限されていることがわかりました。


いずれにしても、ビルドシステムを使用せずに小さなプロジェクト(最大10個のソースファイル)をビルドすることを学ぶことをお勧めします。コンパイラとリンカを直接使用するだけで、MakefileではなくCMakeを使用しません。この方法で実際のプロジェクトを実際にビルドするべきではありませんが、ビルドシステムが実際に何を行うかを知るために、その方法を学ぶ必要があります。それらが何をするのかを知ることは、それらをはるかに使いやすくします。


数か月前、プロジェクトをqmakeから Premake に切り替えました。これも一見の価値があります。 (Luaを使用して)スクリプト可能性が高く、ビルドプロセスをカスタマイズする必要がある場合に最適です。

とはいえ、これはもう少し「手動」なので、ビルドシステムを使用せずに、より基本的なレベルでコンパイルとリンクがどのように機能するかを学習してください。また、ベータ版(Premake 5)であるため、まだ欠けている部分もあります。

qbs も見ることができます。これは、より良いqmakeになるはずです。まだベータ段階ですので、成熟して使いやすくなるまでお待ちください。

30
Humpparitari

CMakeは、はるかに強力なビルドシステムです。構文は、控えめに言っても「それほど良くない」です。しかし、複雑なプロジェクトの場合、物事を達成するためにQMake(または私が知っている任意のビルドシステム)で行う必要があることも、ニースではありません。単純なプロジェクトの場合、QMakeの方が見やすいです。

Qt以外のサードパーティの依存関係の設定チェックが必要な場合、CMakeが必要です。QMakeでの設定チェックのサポートは最小限から存在しないまでです。

一方、QMakeはQt Creatorでうまく機能します(CMakeをCreatorで使用することはできますが、CMakeのサポートは不足しています)。

IOS向けにビルドしてデプロイしたい場合は、Qt CreatorからAndroidをお勧めします。QMakeを強くお勧めします。頭痛)。

19
Frank Osterfeld

QtプロジェクトにCMakeを使用していますが、非常に満足しています。具体的には、CMakeLists.txtに次のものがあります。

set(QT_VERSION_REQ "5.2")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Quick ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Widgets ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Gui ${QT_VERSION_REQ} REQUIRED)

set(CMAKE_AUTOMOC ON)
QT5_WRAP_UI( UI_HDRS ${UI_FILES} )

ADD_EXECUTABLE(${MOC_HEADERS})

target_link_libraries(${PROJECT_NAME}
  Qt5::Core
  Qt5::Quick
  Qt5::Widgets  
  Qt5::Gui  
)

CMakeを使用することに決めた場合、これが役立つことを願っています。

11
Mr Squid

CMakeは、多くのビルドシステムの構成ファイルを生成するのに役立ちます(「ビルドシステム」はCMakeのジェネレーターと呼ばれます)。 CMakeジェネレーターとは? を参照してください。

C/C++ソースのセットとよく書かれたCMakeLists.txt、CMakeを使用して、Visual Studio、CodeBlocks、g ++などのさまざまなビルドシステム(コマンドラインベースのIDE)のプロジェクトを作成できます。CMakeでは、IDEそして最後に使用するコンパイラーと、サポートされているものを「簡単に」切り替えます。

qmakeは、私が知る限り、QtCreatorをIDEとしてのみサポートします(バックグラウンドでサードパーティのコンパイラを使用して放置しました:Visual Studio、g ++、MinGWのnmake ... )。ただし、qmakeを使用してVisual Studioソリューション(slnファイル)を生成することはありません。これがqmakeで見られる主な制限です(QtCreatorが嫌いなので... Visual Studioはより強力で直感的です。)しかし、それは私の意見です)。

本当はqmakeCMakeよりもQtベースのアプリケーションのコンパイルを簡単にします(MOC、.ui、およびQtへの好みがネイティブにサポートされているため)。しかし、とにかくCMake(Qt統合のための組み込み関数があります)を使用して実行できます。 Qtの新しいリリースに移行する場合、CMakeLists.txtのみを少し修正する必要があるかもしれません(Qt4からQt5に移行するのに苦労しました。qmakeを使用するとこれが簡単になると思います)。

個人的に、私はビルド環境にCMakeを使用し、QtCreatorを使用する必要がある場合(Android展開のために)、CMakeスクリプトを生成しますqmake/QtCreatorの.proファイル。qmake .proファイルの構文は非常に単純であるため、うまく機能しますが、特定のIDEにロックされていません。

7
jpo38

qmake

  • Qtを使用するプロジェクトに焦点を当てている
  • プロジェクトファイルはQtCreatorによって簡単に生成されます(初心者に適しています)
  • QtCreatorによるサポート

CMake

  • 幅広いプロジェクトで使用されています
  • 多くのプラットフォームと言語をサポート
  • 複数のIDEでサポートされています。 QtCreator、Visual Studio
  • 複数のIDEのプロジェクト記述を生成します
  • Qtの使用を簡単にするコマンドが含まれています(最も重要なこと:automoc)

私の推奨事項:QtCreatorがあなたのIDEであり、QtまたはC++で始める場合はqmakeを使用します。ビルドで複雑なことをしたい場合はcmakeを使用します。

QmakeとCMakeはどちらも同様に機能します。 qmakeからCMakeに移行するためのチュートリアルについては、 http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html を参照してください。

5
Th. Thielemann