13,007
回編集
(→概要) |
(→概要) |
||
11行目: | 11行目: | ||
<br> | <br> | ||
また、CMakeには、CUI版とGUI版が存在する。<br> | また、CMakeには、CUI版とGUI版が存在する。<br> | ||
<br><br> | |||
== CMakeとqmakeの特徴 == | |||
<center> | |||
{| class="wikitable" | style="background-color:#fefefe;" | |||
|- | |||
! style="background-color:#66CCFF;width: 30%;" | | |||
! style="background-color:#66CCFF;width: 35%;" | qmake | |||
! style="background-color:#66CCFF;width: 35%;" | CMake | |||
|- | |||
| style="background-color:#EEEEEE;" | レシピファイル || <Qtプロジェクト名>.pro || CMakeLists.txt | |||
|- | |||
| style="background-color:#EEEEEE;" | レシピの呼び方 || プロジェクトファイル || CMakeソースコード | |||
|- | |||
| style="background-color:#EEEEEE;" | 特徴 || 変数ベース || コマンドベース | |||
|- | |||
| style="background-color:#EEEEEE;" | ターゲット || 1ファイル 1ターゲット || 1ファイル 複数ターゲット | |||
|- | |||
| style="background-color:#EEEEEE;" | プロジェクト間の連携 || 不可 || ターゲット名でリンク可能 | |||
|- | |||
| style="background-color:#EEEEEE;" | Qtのサポート || ◎ || ○ | |||
|- | |||
| style="background-color:#EEEEEE;" | Qt Creatorの対応 || ◎ || ファイルの追加等の対応がイマイチ | |||
|- | |||
| style="background-color:#EEEEEE;" | カスタムコンパイラの対応 || △ || ◎ | |||
|- | |||
| style="background-color:#EEEEEE;" | Packageの作成 || △ || ○ | |||
|} | |||
</center> | |||
<br> | |||
==== レシピファイルの違い ==== | |||
qmakeとCMakeは、レシピの考え方が異なる。<br> | |||
qmakeは、変数<code>SOURCES</code>等のような変数に適切な値を設定していくことにより、対応するアーキテクチャの設定ファイル等から取得した値を使用して、<br> | |||
MakefileやVisual Studio / XCode向けのプロジェクトファイルを生成する。<br> | |||
CMakeは、コマンドと呼ばれる関数の引数に、ターゲットの情報、Define情報、インクルードパス等をプログラムして、Makefileや各種プロジェクトファイルを生成する。<br> | |||
<syntaxhighlight lang="cmake"> | |||
# qmakeの場合 | |||
TEMPLATE = app | |||
CONFIG -= qt # Qtライブラリを使用しない場合は、変数CONFIGからqtを削除する | |||
SOURCES = main.cpp | |||
# CMakeの場合 | |||
cmake_minimum_required(VERSION 3.15) | |||
project(HelloWorld LANGUAGES CXX) | |||
add_executable(helloworld main.cpp) | |||
</syntaxhighlight> | |||
<br> | |||
以下の例は、Qt Coreライブラリのみを使用するQtソフトウェアにおける最低限のレシピファイルである。<br> | |||
<br> | |||
CMakeは汎用的なツールのため、Qtライブラリを使用する場合、CMakeのコマンド量が増加する。<br> | |||
<code>find_package</code>関数を使用してQtライブラリ全体からQt Coreライブラリを要求することにより、<br> | |||
Qt Coreライブラリを変数Qt5::Core(Qt6では、Qt6::Coreとなる)経由で、<code>target_link_libraries</code>に指定してリンクを指示する。<br> | |||
<syntaxhighlight lang="cmake"> | |||
# qmakeの場合 | |||
TEMPLATE = app | |||
QT -= gui # qmakeの初期状態はGUIが有効なため、変数QTからguiを削除することにより、Qt Coreライブラリのみとなる | |||
SOURCES = main.cpp hello.cpp | |||
HEADERS = hello.h | |||
# CMakeの場合 | |||
cmake_minimum_required(VERSION 3.15) | |||
project(HelloWorld LANGUAGES CXX) | |||
set(CMAKE_AUTOMOC ON) | |||
set(CMAKE_AUTORCC ON) | |||
find_package(Qt5 COMPONENTS Core REQUIRED) | |||
add_executable(helloworld | |||
main.cpp | |||
hello.cpp | |||
hello.h | |||
) | |||
target_link_libraries(helloworld | |||
Qt5::Core | |||
) | |||
</syntaxhighlight> | |||
<br> | |||
==== 共通の機能 ==== | |||
* サブディレクトリ(サブプロジェクト)に対応 | |||
* ファイルの読み書き | |||
* 独自関数の定義 | |||
* 別ファイルに分割したレシピをインクルードできる | |||
* 自動的にmocを呼び出す | |||
* Qtのリソースファイル対応 | |||
* インストールの定義 | |||
* 繰り返し文や条件分岐文 | |||
* プラットフォームの判定 | |||
* インストール | |||
* テストの設定および実行 | |||
* 追加機能およびモジュール等の提供 | |||
<br> | |||
CMakeの強みは、カスタムコンパイラ、機能の拡張性、パッケージ作成まで行う機能が提供されていることである。<br> | |||
qmakeでは、QTestによりテストの設定および実行もできるが、ビルドを補助するツールとしての特色が強い。<br> | |||
CMakeでは、CTest、CPack等の機能により、テストやパッケージ作成も可能である。<br> | |||
<br> | |||
qmakeもCMakeも制御構文を持ち複雑なプロジェクトの作成も可能であるが、プロジェクトでの採用検討という視点から将来性も含めて考慮した場合、CMakeの方が有力である。<br> | |||
<br><br> | <br><br> | ||