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

 

posted @ 2022-02-23 09:57  Citrusliu  阅读(4050)  评论(0编辑  收藏  举报