本文主要介紹了在VsCode下如何使用相關插件與工具來配置Qt的開發環境。
#### **一、準備需要的工具:**
1. Vscode插件:
C/C++(ms-vscode.cpptools) :微軟官方的VsCode C/C++插件,主要提供C/C++的代碼補全,代碼審閱,調試等。
C++ Intellisense(austin.code-gnu-global):主要用于GNU的全局標簽代碼補全功能。
Cmake(twxs.cmake) : 主要提供Cmake腳本的語法提示與高亮。
Cmake Tools(vector-of-bool.cmake-tools):VsCode 下cmake的擴展支持,也就是在把Cmake中的一些命令轉化為一些可視化的操作。
2. MingW: 就是開源GNU編譯器的Windows版本, 用于編譯C/C++ ,類似功能的編譯器還有MSVC(微軟的), Clang等。 不同的編譯器的makefile腳本語法略有不同。
3. Cmake: Cmake是一個跨平臺的構建工具, 由于存在不同的編譯器,和不同的平臺系統,各個編譯器的makefile腳本語法不同,所以誕生了Cmake這個工具,可以使用Cmake腳本生成不同平臺下的makefile,比較方便跨平臺編譯!這里要注意:Cmake只是提供了自動化makefile構建,不會管編譯的,在生成了makefile之后,自己在運行make命令來執行編譯。
Cmake的命令參數較多,使用Cmake-GUI工具就會非常方便的構建腳本。
4. Qt SDK: 要使用QT的庫,就要安裝qt的sdk
以上是環境搭建所需要的一些工具,其中Qt的開源版本中提供有mingW編譯器,不用額外下載,只需要安裝Qt即可,其中有些工具包是可選的。 安裝時注意選擇。這里安裝了Qt5.12開源版本目錄結構如圖:

其中5.12.5 目錄下是Qt的庫包和一些相關的工具,這里我安裝了Qt的4個版本:

與這些版本相對應,Qt 在tools下也提供了對應版本的mingw編譯器,如果需要msvc編譯器需要安裝Visual studio , Qt沒有提供msvc的版本,因為msvc不是開源的。**這里需要注意的是: 不同按本的Qt庫要選擇相應的編譯器,否則會編譯失敗!**
#### **二、配置編譯環境**
這里要說一下VsCode的基本使用:VsCode 本質上只是一個文本編輯器,有賴于各種豐富的插件,使得VsCode 更像是一個IDE。 使用VsCode有一個很好的好處就是,能夠讓開發者更了解項目底層的細節,這樣能夠更好的掌握項目,在項目出現問題時,能夠更敏銳的發現問題所在!
Vscode的配置: VsCode的配置大概有三層:程序默認設置->用戶設置->工作空間設置。 后面的配置會覆蓋前面的配置。工作空間的設置會在當前工程目錄下的 .vscode文件夾下的setting.json文件中。
另外VsCode中很多插件都會有自己的獨立配置文件也存在.vscode文件夾中,一般來說這些插件的配置也可以寫在setting.json中,讓整個工程的文件目錄看起來不是那么凌亂。
ps: VsCode 很有用的一個快捷鍵:``` ctrl + shift + P``` 用來打開命令面板,調用相關的命令,
了解了以上的基礎知識后,就可以配置Qt的開發環境了:
1. 建立一個CmQtApp目錄,在目錄下建立src目錄,用來存放源文件
2. CmQtApp->src目錄下 建立一個 main.cpp文件:
```
#include
usingnamespacestd;
int main(intagrc,char\*argv\[\]){
????cout<<"Hello?World!?\\t\\n";
return0;
}
```
3. 在CmQtApp目錄下 建立CMakeLists.txt 內容如下
```
# 要求的cmake最小版本
cmake\_minimum\_required(VERSION?3.1)
#工程名字
project(CmQtApp);
#要生成的文件的依賴
add_executable(${PROJECT\_NAME}?./src/main.cpp)
```
有了這些文件以后, 剩下的就是如何運行,調試這個的程序。
使用 ``` ctrl+shift +p``` 在彈出的命令面板中選擇:open wordspace settings,來配置我們的工程。

在打開的面板中,可以看到有許多的選項可以配置,

我們所需要的幾個重要配置就是插件(Extensions)下的 C/C++ 以及Cmake的一些配置:
```"C_Cpp.default.configurationProvider":?"vector-of-bool.cmake-tools"```
這個配置在網上很多的文章中都沒有說清楚!而且網上文章中的這個配置項 多位于.vscode/c_cpp_properties.json 這個獨立的文件中,其實也可以直接放在seting.json中。 而這個配置的意思,網上轉來轉去的文章根本都沒有說明!
這個配置的意思是:c_cpp編譯的環境變量等的配置從哪里讀取,或者說是由誰提供。vector-of-bool.cmake-tools 是Cmake Tools 這個插件的名字。 Cmake Tools中調試的時候,也需要指出編譯器路徑等。所以這個配置項的意思是 c_cpp所需的默認配置跟Cmake Tools 中相關的編譯配置相同!
"C_Cpp.default.includePath":?["G:/Qt/5.12.5/mingw73_32/include/**"],這個路徑指出了頭文件的路徑,可以配置多個路徑, 注意```include/**``` 后面的兩個星號指的是 讓插件遍歷 include 目錄下所有目錄。如果不包含Qt的頭文件,那么編譯的時候會失敗。
接下來配置Cmake插件的相關選項:
"cmake.buildDirectory":?"${workspaceRoot}/build": 指出了Cmake要將構建的腳本生成在哪里
基本上配置了這三個重要選項即可,剩下的mingW編譯器的路徑等, 可以使用 CMake:Scan for Kits 命令來讓插件搜索本機安裝的編譯器。


可以看到我本機搜索出來了 這些編譯器, 然后可以使用在使用Cmake Configure的時候 就可以選擇一個編譯包來進行 編譯構建。
#### **三、編譯構建**
配置要以上環境后,在命令面板選擇 Cmake:Configure 命令:

即可看到當前工程目錄下生成了一個 dist文件夾,里面由cmake生成的makefile文件等文件。
與此同時,注意在VsCode的最底部,有了一些工具圖標

可以選擇不同的開發包來構建相應的目標程序。
現在把工程文件修改一下,讓工程支持Qt,可以顯示Qt的窗體
首先修改CMakeLists.txt文件
```
cmake_minimum_required(VERSION?3.1)
set(PROJECT_NAME?CmQtApp)
project(${PROJECT_NAME})
set(CMAKE_BUILD_TYPE?Release)
#??import?Qt?library?start
set(CMAKE_INCLUDE_CURRENT_DIRON)
set(CMAKE_AUTOMOCON)
set(CMAKE_AUTORCC?ON)
set(CMAKE_CXX_STANDARD?11)
set(CMAKE_CXX_STANDARD_REQUIRED?ON)
set(CMAKE_PREFIX_PATH?G:/Qt/5.12.5/mingw73_32)
find_package(Qt5?COMPONENTS?Widgets?REQUIRED)
#?import?Qt?libirary?end
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib)
set(EXECUTABLE_OUTPUT_PATH${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/bin)
add_executable(${PROJECT_NAME}?./src/application.cpp)
target_link_libraries(${PROJECT_NAME}?Qt5::Widgets)
```
#### **四、調試程序 **

點擊左側菜單欄的爬蟲,然后點擊齒輪,會彈出來一個調試launch.json配置文件,配置相關的路徑即可.
```
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [{"path":"%path%;G:/Qt/5.12.5/mingw73_32/bin"}],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "G:\\Qt\\Tools\\mingw730_32\\bin\\gdb.exe",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"
}
]
}
```
這里要注意的參數是:
miDebuggerPath: 指出了mingw下gdb.exe這個調試器的路徑。
request: 這里是launch, 還有一種是attach, attach用來調試Dll程序很有用
program: 是需要調試的程序名字
environment: 是調試時所需的臨時環境變量, 比如調試Qt程序時,需要把Qt的相關dll添加到環境變量,否則程序無法運行。
preLaunchTask: 是指調試前要執行的任務,在VsCode/task.json中可以配置