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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM