CLion에서 Qt 개발환경 설정하기
Qt Framework를 사용할 때 개발툴로 Qt Creator를 사용하는데 이것을 대신하여 Jetbrains사의 C++ 개발 환경인 CLion을 이용하여 윈도 위젯을 만들 수 있다.
Qt는 기본으로 제공하며 여기에 CMakeLists.txt를 수정하여 개발 환경을 구축한다. 프로젝트를 생성하고 빌드하면 cmake 설정 에러가 날 수 있는데 cmake 파일을 수정하기 않아서이다.
graph LR
A["New Project"] --> B["Qt Widgets Excutable"]
B --> C["CMakeLists.txt"]
C --> D["Qt UI Class"]
추가로 프로그램 아이콘(타이틀바, 실행파일)을 설정한다.
CMakeLists.txt 툴체인 샘플
set(QT_ROOT_PATH "C:/Qt/6.8.3")
set(MSYS2_UCRT_PATH "C:/msys64/ucrt64")
if (MSVC)
set(CMAKE_PREFIX_PATH "${QT_ROOT_PATH}/msvc2022_64")
elseif (EXISTS "${MSYS2_UCRT_PATH}")
list(APPEND CMAKE_PREFIX_PATH "${MSYS2_UCRT_PATH}")
set(CMAKE_FIND_ROOT_PATH "${MSYS2_UCRT_PATH}")
else ()
set(CMAKE_PREFIX_PATH "${QT_ROOT_PATH}/mingw_64")
endif ()
개발환경 : CLion 2025.3.4, Qt 6.8.3, 툴체인 MinGW/Visual Sutio
CMakeLists.txt 기본설정
cmake_minimum_required(VERSION 4.1)
project(qtproject)
set(QT_ROOT_PATH "C:/Qt/6.8.3")
if (MSVC)
set(CMAKE_PREFIX_PATH "${QT_ROOT_PATH}/msvc2022_64")
else ()
set(CMAKE_PREFIX_PATH "${QT_ROOT_PATH}/mingw_64")
endif ()
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS
${CMAKE_SOURCE_DIR}/ui
${CMAKE_SOURCE_DIR}/src
)
add_executable(${PROJECT_NAME} main.cpp resources.qrc app.rc
src/mainwindow.cpp
include/mainwindow.h
ui/mainwindow.ui)
target_include_directories(${PROJECT_NAME} PRIVATE
include
${CMAKE_BINARY_DIR}
)
target_link_libraries(${PROJECT_NAME} Qt::Core Qt::Gui Qt::Widgets)
CMakeLists.txt 빌드 환경설정
위의 코드에 아래의 코드를 더하여 빌드 환경을 구축한다. 각 빌드 기본 폴더 안의 deploy 폴더에 배포 시 필요한 최소화된 파일들이 생성된다. MinGW, MSVC 같이 적용한 파일이다.
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON)
if (TARGET Qt6::qmake)
get_target_property(_qmake_executable Qt6::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
endif ()
if (WINDEPLOYQT_EXECUTABLE)
set(DEPLOY_DIR "${CMAKE_BINARY_DIR}/deploy")
if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DEPLOY_MODE "--debug")
else ()
set(DEPLOY_MODE "--release")
endif ()
set(MINIMIZE_FLAGS
"--no-translations"
"--no-opengl-sw"
"--no-system-d3d-compiler"
"--no-svg"
"--no-quick-import"
"--no-sql"
"--no-network"
)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND "${WINDEPLOYQT_EXECUTABLE}"
${DEPLOY_MODE}
--compiler-runtime
--no-translations
--verbose 0
"$<TARGET_FILE:${PROJECT_NAME}>"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${DEPLOY_DIR}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${DEPLOY_DIR}"
COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:${PROJECT_NAME}>"
"${DEPLOY_DIR}/"
COMMAND "${WINDEPLOYQT_EXECUTABLE}"
${DEPLOY_MODE}
--compiler-runtime
${MINIMIZE_FLAGS}
--verbose 1
"${DEPLOY_DIR}/$<TARGET_FILE_NAME:${PROJECT_NAME}>"
COMMENT "build 실행 환경, deploy 최소 DLL 구성 완료"
)
endif ()
endif ()
프로그램 아이콘 설정
cmake 파일의 add_executable 부분에 넣어준다. 예제에는 포함하였다.
- app.rc
IDI_ICON1 ICON "main.ico"
- resources.qrc
<RCC>
<qresource prefix="/">
<file>main.ico</file>
</qresource>
</RCC>
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QScreen>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
qDebug() << "현재 기기 픽셀 비율:" <<
a.devicePixelRatio();
qDebug() << "적용된 라운딩 정책:" <<
QGuiApplication::highDpiScaleFactorRoundingPolicy();
MainWindow m;
m.show();
return QApplication::exec();
}
mainwindow.h
#ifndef QTPROJECT_MAINWINDOW_H
#define QTPROJECT_MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow() override;
private:
Ui::MainWindow *ui;
};
#endif //QTPROJECT_MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
}
MainWindow::~MainWindow() {
delete ui;
}
main.cpp를 제외한 소스코드는 src,inclue,ui 폴더로 이동하여 작성한다. 코드 작성 후 reset cache and Reload project를 실행하여 설정이 꼬인 부분을 해결한다.
참고로 UI 파일을 클릭하면 Qt 설치 시 제공된 디자이너가 실행된다.
msys64/ucrt64 QT예제
cmake_minimum_required(VERSION 4.2)
project(msys2_qt)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "C:/msys64/ucrt64")
find_package(Qt6 REQUIRED COMPONENTS Core Sql)
find_package(SQLite3 REQUIRED)
add_executable(${PROJECT_NAME}
main.cpp
db_raii.h
)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Sql
SQLite::SQLite3
)
CMakeLists.txt 전체 내용 및 예제는 GitHub에서 확인할 수 있다.