轉載自: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