本稿は「Introducing qmake2cmake」の抄訳です。
Qt独自のQMakeプロジェクトファイルは、qtbaseに存在するpro2cmakeというPythonスクリプトを使用して変換されます。このスクリプトは、Qtリポジトリ内のプロジェクトを変換するために特別に作成されており、ユーザープロジェクトの変換にはほとんど役立ちません。
このスクリプトをフォークして、お客様のプロジェクトに適用できる変換ツールにしました。それがqmake2cmakeです。
qmake2cmake
ツールは、変換された.pro
ファイルの一般的な機能をカバーするCMakeLists.txt
を作成します。生成されたCMakeプロジェクトはベースラインとして使用できますが、おそらく手動で調整が必要になるでしょう。
変換できないQMake構文は、CMakeプロジェクト内のコメントとして表示されます。これらのコメントは、該当部分を手動で変換する際に役立ちます。
多くのプロジェクトには複数の.proファイルがあります。QMakeのSUBDIRS
階層に対しては、qmake2cmake_all
があり、プロジェクトのルートディレクトリ内で起動し、その下のすべてを変換します。
Qt自体では、変換速度が無視できない要素でした。そのため、qmake2cmake_all
はサブプロジェクトの変換を並列化しています。
変換できない箇所はいくつかあります。
TEMPLATE = aux
プロジェクト.prf
ファイルこのすべては、手動で変換する必要があります。
qmake2cmakeのインストールは非常に簡単で、次のコマンドを実行するだけです。
python -m pip install qmake2cmake
ソースコードが必要な場合は、下記リポジトリをクローンしてください。
git://code.qt.io/qt/qmake2cmake.git
インストールの要件やその他の詳細については、README.mdを参照してください。
プロジェクト構造の全体を変換するには、プロジェクトディレクトリをqmake2cmake_all
に渡してください。qmake2cmake_all ~/projects/myapp --min-qt-version 6.3
プロジェクトがビルドに使用する最低Qtバージョンを指定する必要があります。これにより、正しいCMake APIがQtバージョンに選択されます。
各呼び出しでこのパラメータを渡すことを避けるために、QMAKE2CMAKE_MIN_QT_VERSION
環境変数を設定することもできます。
次の呼び出しによって、単一のQMakeプロジェクトファイルをCMakeに変換します。qmake2cmake ~/projects/myapp/myapp.pro
デフォルトでは、CMakeLists.txt
は.pro
ファイルと同じ場所に配置されます。別の場所に作成するには、-o
オプションを使用してください。qmake2cmake ~/projects/myapp/myapp.pro -o ~/projects/myapp-converted/CMakeLists.txt
次のコードは、gui/analogclock example のサンプルを最小Qtバージョン6.3でCMakeに変換した結果を示しています。
cmake_minimum_required(VERSION 3.16)
project(analogclock VERSION 1.0 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
qt_standard_project_setup()
find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
qt_add_executable(analogclock WIN32 MACOSX_BUNDLE
../rasterwindow/rasterwindow.cpp ../rasterwindow/rasterwindow.h
main.cpp
)
target_include_directories(analogclock PRIVATE
../rasterwindow
)
target_link_libraries(analogclock PRIVATE
Qt::Core
Qt::Gui
)
install(TARGETS analogclock
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
qt_generate_deploy_app_script(
TARGET analogclock
FILENAME_VARIABLE deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script}
qmake2cmakeツールはQtプロジェクトによってホストされており、通常の貢献ルールが適用されます。
バグは、プロジェクト「Qt(QTBUG)」およびコンポーネント「Build Tools: other」を使用して、https://bugreports.qt.io/ に報告してください。