Clion - 配置 Qt 开发环境
转载自:https://blog.csdn.net/qq_33154343/article/details/120070828
自关联:https://www.cnblogs.com/citrus/p/16359488.html
概述
- 简述
- 环境
- 预先配置项
- 配置 CMAKE_PREFIX_PATH(Qt 路径)
- 配置 ToolChians(工具链)
- 配置构建 CMake 环境
- Clion中运行Qt项目
- CMake调用Qt语法
- 附:构建时由Qt源码导致的报错
简述
预先安装 Win10、QtCrator、CMake 以及 CLion。
若想使用 CLion 开发 Qt 就必须告知 Clion 和准备编译构建的项目,一些必要的参数配置。
环境
💻 win10 21H1 📎 Qt 5.12.11 📎 Visual Studio 2017 📎 Qt Creator 4.15.0
Win10 + CLion + CMake + MSVC(Visual Studio)+ Qt
Win10 + CLion + CMake + GCC(MinGW)+ Qt
预先配置项
1、配置 CMAKE_PREFIX_PATH(Qt 路径)
CMAKE_PREFIX_PATH 的值为告知此项目使用的 Qt 的版本;即 Qt 安装路径。以下三种方式任选其一即可。
- 新建项目时填写
- 手动写在 CMakeLists.txt 中
set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.11/5.12.11/msvc2017")
- 在设置中的 CMake 配置中的 CMake option: 中写参数
-DCMAKE_PREFIX_PATH=C:/Qt/Qt5.12.11/5.12.11/msvc2017
2、配置 ToolChians(工具链)
当选中正确的 Environment 时,后面系类会自动检测出来正确的配置。可参考下图
- 配置 MSVC(Visual Studio) 模式
- 配置 GCC(MinGW)模式
3、配置构建 CMake 环境
告知系统使用哪一个 ToolChinas (工具集合)来处理此项目文件。是 MSCVC 还是 GCC 相关系的?
Clion中运行Qt项目
经过上面的准备工作,最后在运行 CLion,按照步骤可看到最后成功运行。
1、配置 ToolChians、CMake
2、切换想要构建生成的配置方案(Debug/Relase/RelWithDebInfo/MinSizeRel、MSVC/MinGW)
3、执行编译 CMakeLists.txt 文件,生成 Makefile 文件;
4、编译上一步生成的 Makefile 文件,编译源文件、链接系统文件、生成目标二进制程序
5、加载所需要的系统和三方动态库等、运行生成的目标二进制程序
6、看到窗口运行成功
7、个人配置的集中生成目标文件的集中模式(可忽略此)
CMake调用Qt语法
CLion 自动生成的 CMakeLists.txt 文件配置内容,如下,
1、简单介绍 CMake 语法:
1 cmake_minimum_required(VERSION 3.20) # 最低 cmake 版本 2 project(XTest) # 此项目名称 3 4 set(CMAKE_CXX_STANDARD 17) 5 set(CMAKE_AUTOMOC ON) # 启用 qt moc 的支持 6 set(CMAKE_AUTORCC ON) # 启用 qrc 资源文件的支持 7 set(CMAKE_AUTOUIC ON) # 启用 qt uic 的支持 8 9 set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.12.11/5.12.11/msvc2017") # Qt 的安装路径 10 11 find_package(Qt5 COMPONENTS # 查找 Qt5 的如下库 12 Core 13 Gui 14 Widgets 15 REQUIRED) 16 17 add_executable(XTest main.cpp) # 生成目标文件 XTest 18 target_link_libraries(XTest # 链接 Qt5 的如下二进制库 19 Qt5::Core 20 Qt5::Gui 21 Qt5::Widgets 22 ) 23 24 if (WIN32) # 可忽略,大意为未配置或尝试找不到 Qt 安装目录,则警告 25 set(DEBUG_SUFFIX) 26 if (CMAKE_BUILD_TYPE MATCHES "Debug") 27 set(DEBUG_SUFFIX "d") 28 endif () 29 set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}") 30 if (NOT EXISTS "${QT_INSTALL_PATH}/bin") 31 set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") 32 if (NOT EXISTS "${QT_INSTALL_PATH}/bin") 33 set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..") 34 endif () 35 endif () 36 if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll") 37 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 38 COMMAND ${CMAKE_COMMAND} -E make_directory 39 "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") 40 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 41 COMMAND ${CMAKE_COMMAND} -E copy 42 "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll" 43 "$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/") 44 endif () 45 foreach (QT_LIB Core Gui Widgets) 46 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 47 COMMAND ${CMAKE_COMMAND} -E copy 48 "${QT_INSTALL_PATH}/bin/Qt5${QT_LIB}${DEBUG_SUFFIX}.dll" 49 "$<TARGET_FILE_DIR:${PROJECT_NAME}>") 50 endforeach (QT_LIB) 51 endif ()
2、简单介绍 CMake 语法:
1 cmake_minimum_required(VERSION 3.0) 2 project(test) 3 4 # 指定c++标准的版本 5 set(CMAKE_CXX_STANDARD 17) 6 7 # 自动调用moc,uic,rcc处理qt的扩展部分 8 set(CMAKE_AUTOMOC ON) 9 set(CMAKE_AUTOUIC ON) 10 set(CMAKE_AUTORCC ON) 11 12 # 设置Qt5的cmake模块所在目录,如果不设置将使用系统提供的版本 13 # QT_DIR和QT_VERSION是指定了qt安装目录和版本的环境变量 14 # 如果你使用了系统的cmake,那么会优先使用系统提供模块,因为cmake会优先搜索CMAKE_SYSTEM_PREFIX_PATH 15 # 如果你不想让cmake优先搜索系统目录(会导致编译使用系统安装的qt而不是我们配置的),需要提示find_package命令 16 set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{QT_DIR}/$ENV{QT_VERSION}/gcc_64/lib/cmake) 17 18 # 找到对应的qt模块,名字为qmake中QT += <name>中的name首字母大写后加上Qt5前缀 19 # 例如core为QtCore,你也可以去${CMAKE_PREFIX_PATH}的目录中找到正确的模块名 20 # 如果不想使用系统qt,这样写(注意NO_DEFAULT_PATH参数,它会让find_package跳过系统目录的查找): 21 find_package(Qt5Widgets REQUIRED NO_DEFAULT_PATH) 22 23 # 如果你想要使用系统自带的qt,这样写: 24 # find_package(Qt5Widgets REQUIRED) 25 26 # 将当前目录的所有源文件添加进变量 27 aux_source_directory(. DIRS_SRCS) 28 29 # 通常这样设置就可以,如果你的项目包含qrc文件,那么需要将它们单独添加进来 30 # 例如add_executable(test ${DIRS_SRCS} resources.qrc) 31 add_executable(test ${DIRS_SRCS}) 32 33 # 把对应Qt模块的库链接进程序 34 target_link_libraries(test Qt5::Widgets)
3、更详细的注释跳转链接,可参考另一项目的此文件。
附:构建时由Qt源码导致的报错
构建项目报错:QT MSVC2017 constexpr 函数“qCountLeadingZeroBits”不能生成常量表达
导致原因:Qt 源码 bug 导致,源码文件:src/corelib/tools/qalgorithms.h
官方解释:Fix MSVC2017 compilation with enabled relaxed constexpr on 32-bit target
解决方法:https://codereview.qt-project.org/c/qt/qtbase/+/236948/2/src/corelib/tools/qalgorithms.h