VSCode+Qt+MSVC配置
VSCode功能强大,使用也很舒服,但总是遇到各种坑;我在配置VSCode+Qt+MSVC时,网上也找了一堆资料,总是零零散散,好在配置成功了,希望大家以后少走弯路。
一 安装
- Win10 SDK 版本:10.0.22621.0。
- 安装Qt。我安装的是qt5.15.2 + MSVC。
- 安装VS。我安装的是VS2019.
- 安装VSCode。官网下载安装。
- VSCode插件安装。在VScode中安装配置QT必要插件:C/C++、Qt Configure、Qt tools。
- 调试器:CDB。
二 环境配置
QT环境变量配置
C:\Qt\5.15.2\msvc2019_64;C:\Qt\5.15.2\msvc2019_64\bin;C:\Qt\Tools\QtCreator\bin。将这三个路径添加至环境变量。
cl编译器环境配置
-
创建INCLUDE环境变量,添加路径:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\winrt;10.0.22621.0为win10SDK版本,根据自己版本选择。
注意:INCLUDE和LIB中的winSDK版本要一致,比如我使用的是10.0.22621版本,INCLUDE和LIB都选择设置为INCLUDE和LIB的版本。 -
进入cl.exe所在的路径:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64;该路径下有cl.exe则为正确的。将该路径添加至环境变量Path下。
rc配置
进入:C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64,拷贝rc.exe、rcdll.dll。
进入:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64,将拷贝的rc.exe、rcdll.dll复制到该目录下。
三 VSCode配置
Qt创建一个项目,取消影子构建。运行一下,确定Qt工作正常。
使用VSCode打开,我这是已经配置好的,如果是新创建的Qt工程,只有默认的pro、h、cpp、ui等文件。
C/C++插件配置
快捷键:ctrl+shift+p打开运行命令,输入C++,选择第一个编辑配置(UI),创建默认配置。
进入C/C++插件配置界面:
配置名称:一般都是Win32,除非系统是x86。
编辑器路径:一般都会默认选中cl.exe,不会显示路径。建议手动选择,将cl.exe的绝对路径添加进去,因为可能存在多个版本cl.exe。
IntelliSense 模式:选择windows-msvc-x64
包含路径:添加:C:/Qt/5.15.2/msvc2019_64/include/** ;该路径为qt msvc的include路径。
C标准和C++标准根据情况选择,我使用的是C17/C++17。
C/C++插件配置完成后,会在工程目录下.vscode文件夹下生成一个c_cpp_properties.json配置文件,该json文件记录了C/C++插件的配置信息。另外.vscode文件夹默认是隐藏,可自行在文件管理器中设置不隐藏。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:/Qt/5.15.2/msvc2019_64/include/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.22621.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-msvc-x64"
}
],
"version": 4
}
配置task.json
选择终端-运行任务-配置任务-使用模板创建task.json文件-Others;会在.vscode文件下生成一个task.json的配置文件。
task.json的配置要和Qt配置一致,可以对照Qt构建界面。
qmake.exe在构建pro文件时会输入四个参数: -spec, win32-msvc,“CONFIG+=debug”,“CONFIG+=qml_debug”。这四个参数对应json文件中的args。
配置jom.exe:command修改为C:/Qt/Tools/QtCreator/bin/jom/jom.exe,最好使用绝对路径,如果你足够了解vscode可以使用相对路径。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
//在当前项目目录创建build文件夹
"label": "mkdir", //任务名称
"type": "shell", //任务类型,定义任务是被作为进程运行还是在 shell 中作为命令运行。
"options": {
"cwd": "${workspaceFolder}" //已执行程序或脚本的当前工作目录,设置当前项目文件夹
},
"command": "mkdir", //命令
"args": [ //命令后面跟的参数
"-Force",
"build"
]
},
{
"label": "qmake-debug",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build" //进入build目录
},
"command": "C:/Qt/5.15.2/msvc2019_64/bin/qmake.exe", //qmake命令,这里没用完整路径,是因为配置到环境变量了 C:/Qt/5.15.2/mingw81_64/bin/qmake.exe
"args": [ //跟的参数是不是很熟悉,就是上面分析出来的Qt Creator执行流程
"../${workspaceFolderBasename}.pro", //在build目录上一级哦
"-spec",
"win32-msvc",
"\"CONFIG+=debug\"",
"\"CONFIG+=qml_debug\""
],
"dependsOn": [ //这是本条命令依赖的前置条件,就是上面创建build文件夹的task,直接执行本task会自动先调用依赖的task
"mkdir" //其实可以手动执行一次,后面不用每次都执行创建目录的操作
]
},
{
"label": "make-debug",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build"
},
"command": " C:/Qt/Tools/QtCreator/bin/jom/jom.exe", //MinGW这个也配置在环境变量了,不用写完整路径了 C:/Qt/Tools/mingw810_64/bin/mingw32-make.exe
"args": [
"-f",
"Makefile.Debug"//-f 选择makefile,这是qmake编译出来的
// "-j7" //这个参数都知道吧,编译用的线程数量
],
"dependsOn": [
"qmake-debug"
]
},
{
"label": "run-debug",
"type": "process", //运行就不能选择shell执行了,要选择process
"options": {
"cwd": "${workspaceFolder}/build/debug" //没在.pro配置DESTDIR,会生成到build目录下面对应目录
},
"command": "${workspaceFolderBasename}.exe", //执行的exe名字,一般当前项目文件夹的名称,自定义可以写其他的
"dependsOn": [
"make-debug"
]
},
{
"label": "qmake-release",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build"
},
"command": "C:/Qt/5.15.2/msvc2019_64/bin/qmake.exe",
"args": [ //注意release跟debug参数的差异
"../${workspaceFolderBasename}.pro",
"-spec",
"win32-msvc",
"\"CONFIG+=qtquickcompiler\""
],
"dependsOn": [
// "mkdir" //不用每次都创建吧
]
},
{
"label": "make-release",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build"
},
"command": " C:/Qt/Tools/QtCreator/bin/jom/jom.exe",
"args": [
"-f",
"Makefile.Release" //注意release跟debug参数的差异
// "-j7"
],
"dependsOn": [
"qmake-release"
]
},
{
"label": "run-release",
"type": "process",
"options": {
"cwd": "${workspaceFolder}/build/release"
},
"command": "${workspaceFolderBasename}.exe",
"dependsOn": [
"make-release"
]
},
{
"label": "clean",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build"
},
"command": " C:/Qt/Tools/QtCreator/bin/jom/jom.exe",
"args": [
"clean"
]
}
]
}
构建运行
快捷键:ctrl+shift+p打开运行命令,输入run task,选择第一个 Run Task。
选择run-debug
选择 继续而不扫描任务输出(根据自己的需要选择)
运行成功后,终端输出无报错,窗体正常显示。
配置调试器
MSVC使用的是CDB调试器,MinGW使用的是GDB调试,注意区分。MSVC貌似也可以使用GDB,但没有研究,所不做阐述。以下只是用CDB调试器。
在VSCode左侧选择运行与调试,点击创建launch.json。点击launch.json右下边点击添加配置,选择C/C++配置 gdb启动;这边添加的是GDB调试器,我们要配置的是CDB,不过无所谓,我们要的是一个模板。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "debug cdb",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/debug/${workspaceFolderBasename}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
// 以下注释掉是因为我有配置CDB的环境变量
// "setupCommands": [
// {
// "description": "为 cdb 启用整齐打印",
// "text": "-enable-pretty-printing",
// "ignoreFailures": true
// }
// ],
// "miDebuggerPath": "C:/Program Files (x86)/Windows Kits/10/Debuggers/x64/cdb.exe"
}
]
}
随便打个断点,点击运行。
四 配置错误导致的问题
错误1:[‘cl’ 不是内部或外部命令,也不是可运行的程序]
在完成第二步环境配置后,ctrl+shift+p运行程序,在终端界面如果出现’cl’ 不是内部或外部命令,也不是可运行的程序,则说明cl环境变量配置错误,程序引用不到cl的环境导致错误。
如果环境没问题,注意下cl的版本,是否是x86、arm等。
错误2:[iostream: 不包括路径集]
与错误1原因是一致的,属于cl环境问题,程序未引用到cl。
错误3:[无法运行“rc.exe”]
在完成第二步环境配置后,ctrl+shift+p运行程序,在终端界面出现无法运行“rc.exe”。这个问题是cl无法引用到rc,rc是win10 SDK中的文件,将其拷贝到使用的cl路径下即可,注意rc版本要和cl对应,注意x86、arm等版本。
如果环境没问题,注意下cl的版本,是否是x86、arm等。