한국어
Qt
 

qmake2cmake 도구는 QMake 프로젝트 파일(.pro)의 가장 일반적인 속성을 포함하는 CMakeLists.txt 를 생성한다. 생성된 CMake 프로젝트는 베이스로 사용할 수 있으며 수동 조정이 필요할 가능성이 크다.

변환할 수 없는 QMake 구성은 CMake 프로젝트에서 주석처리된다. 이러한 주석은 수동으로 조정해줄 때 참고하면 도움이 된다.

많은 프로젝트에는 하나 이상의 .pro 파일이 있다. QMake의 SUBDIRS 가 있는 프로젝트는 루트 디렉토리에서 작동하고 그 아래의 모든 것을 변환할 수 있는 qmake2cmake_all 이 있다.

반면 변환되지 않는 몇 가지 QMake 구성이 있다. 다음 항목들은 수동으로 변환해야 한다.

  • TEMPLATE = aux 프로젝트
  • 사용자 정의 .prf 파일
  • 추가 컴파일러
  • 추가 타겟

 

설치방법

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}
)
...
번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86935
79 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 5037
78 QSocketNotifier로 파일 디스크립터의 활동감지 makersweb 2019.08.28 1794
77 MCU용 Qt에 대해서 makersweb 2019.08.22 1978
76 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 1684
75 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 4027
74 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2175
73 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 2398
72 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 1020
71 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 4099
70 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 3595
69 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 2255
68 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 6364
67 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 10267
66 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 6349
65 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 15188
64 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 2726
63 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 12255
62 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 5576
61 Q_D매크로와 d-pointer file makersweb 2019.05.07 822
60 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 223160