qmake2cmake 도구는 QMake 프로젝트 파일(.pro)의 가장 일반적인 속성을 포함하는 CMakeLists.txt 를 생성한다. 생성된 CMake 프로젝트는 베이스로 사용할 수 있으며 수동 조정이 필요할 가능성이 크다.
변환할 수 없는 QMake 구성은 CMake 프로젝트에서 주석처리된다. 이러한 주석은 수동으로 조정해줄 때 참고하면 도움이 된다.
많은 프로젝트에는 하나 이상의 .pro 파일이 있다. QMake의 SUBDIRS 가 있는 프로젝트는 루트 디렉토리에서 작동하고 그 아래의 모든 것을 변환할 수 있는 qmake2cmake_all 이 있다.
반면 변환되지 않는 몇 가지 QMake 구성이 있다. 다음 항목들은 수동으로 변환해야 한다.
TEMPLATE = aux
프로젝트python 을 사용하여 다음과 같이 qmake2cmake 를 간단하게 설치할 수 있다.
python -m pip install qmake2cmake
다음 호출은 단일 QMake 프로젝트 파일을 CMake로 변환한다.
qmake2cmake ~/projects/myapp/myapp.pro
기본적으로 CMakeLists.txt는 .pro 파일 옆에 생성된다.
다른 위치에 CMakeLists.txt를 생성하려면 -o 옵션을 사용하면 된다.
qmake2cmake ~/projects/myapp/myapp.pro -o ~/projects/myapp-converted/CMakeLists.txt
전체 프로젝트 트리를 변환하려면 프로젝트 디렉토리를 qmake2cmake_all에 전달한다.
qmake2cmake_all ~/projects/myapp --min-qt-version 6.3
프로젝트를 빌드할 가장 낮은 Qt 버전을 지정하면 Qt 버전에 적합한 CMake API가 선택된다.
이것을 모든 호출에 전달하지 않으려면 QMAKE2CMAKE_MIN_QT_VERSION
환경 변수를 설정하면 된다.
다음의 example.pro 가 있으며 Qwt 라이브러리를 사용하고 있다.
QT += core gui
CONFIG += c++11
QWT_CONFIG += QwtPlot QwtPolar QwtWidgets QwtSvg QwtOpenGL
QWT_ROOT = $${PWD}/qwt-6.2.0
INCLUDEPATH += $${QWT_ROOT}/src
DEPENDPATH += $${QWT_ROOT}/src
INCLUDEPATH += $${QWT_ROOT}/classincludes
DEPENDPATH += $${QWT_ROOT}/classincludes
INCLUDEPATH += $$PWD/Eigen
...
LIBS += -L$${QWT_ROOT}/lib/ -lqwt
변환
qmake2cmake example.pro
생성된 CMakeLists.txt 에서 수동으로 Qwt 라이브러리의 위치를 잡아주기위해 find_library
를 사용했다.
cmake_minimum_required(VERSION 3.16)
project(example VERSION 1.0 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# When using Qt 6.3, you can replace the code block below with
# qt_standard_project_setup()
set(CMAKE_AUTOMOC ON)
include(GNUInstallDirs)
set(CMAKE_AUTOUIC ON)
find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
...
target_include_directories(example PRIVATE
Eigen
qwt-6.2.0/classincludes
qwt-6.2.0/src
)
# Qwt 라이브러리를 찾기위해 수동으로 넣어줌.
find_library (QWT_LIBRARY qwt
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/qwt-6.2.0/lib/
)
target_link_libraries(example PRIVATE
# Remove: L${CMAKE_CURRENT_SOURCE_DIR}/qwt-6.2.0/lib/
Qt::Core
Qt::Gui
${QWT_LIBRARY}
)
...