从零开始配置Qt+VsCode环境_vscode配置qt
从零开始配置Qt+VsCode环境
文章目录
- 从零开始配置Qt+VsCode环境
-
- 写在前面
- 扩展安装及配置
-
- Qt Configure配置
- VsCode创建Qt工程
- VsCode+QMake+MinGw
- VsCode+QMake+Msvc
- VsCode+CMake+MinGw
- VsCode+CMake+Msvc
- QtCreator+QMake+MinGw->VsCode
- QtCreator+QMake+Msvc->VsCode
- QtCreator+CMake+MinGw->VsCode
- QtCreator+CMake+Msvc->VsCode
- 脚本和配置的通用化
-
- VsCode+QMake
写在前面
- 测试环境(20241120):
Win11 + VsCode1.93.0 + Qt5.15.2 + CMake3.28.0-rc3
- 本文章适用于有一定Qt使用基础,并且想转到VsCode的同学。
扩展安装及配置
-
Qt Configure(@vector-wlc)
必须 -
Qt Extension Pack(@Qt Group)
,不是必要但可提升使用体验,Qt UI
具有点击.ui
文件启动Qt Widgets Designer
。
-
Qt C++ Extension Pack(@Qt Group)
,该扩展包包含了Qt Extension Pack(@Qt Group)
,同时增加了C/C++(@Microsoft)
,CMake(@twxs)
,CMake Tools(@Microsoft)
,对于不想手动一个一个安装的可以推荐。若想使用CMake这个三个都是必须的。 -
对于C/C++推荐装一个
C/C++ Extension Pack(@Microsoft)
Qt Configure配置
-
Qt Configure: Mingw Path
,请设置MinGw
的bin
之前那个路径,请根据自身环境实际情况进行配置D:\\Programs\\Qt\\5.15.2\\mingw81_64
-
Qt Configure: Qt Dir
,请根据自身环境实际情况设置Qt
的安装路径D:\\Programs\\Qt
-
Qt Configure: Vcvarsall Path
,设置VS
环境变量脚本路径,在使用Msvc
编译器时会用到,同样请根据自身环境实际情况进行配置D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat
- 这里主要了就是配置Qt Configure扩展其它扩展记不太清楚了,若有不懂的可评论或者私信沟通。
- 还有就是我的CMake是设置了系统环境变量的,有可能会对项目操作有一些影响。
VsCode创建Qt工程
-
Ctrl + Shift + P
通过QtConfigure
插件新建工程 -
输入项目名称并确认
-
选择Qt的构建套件,这些都是Qt的构建套件包含MinGw和Msvc,不同的Qt版本略有不同,请结合自身实际情况进行选择
-
选择构建工具
-
选择是否带UI文件
-
选择完成过后将自动创建项目工程
- 自动创建的工程如下,
- 其中
.pro
文件是Qt
的项目文件, src
是自动生成的源文件.vscode
中是VsCode
工程工作时必要的配置信息,scripts
中是项目构建生成时的脚本,- 其实
VsCode
编译器工程本质上是通过命令行执行这些脚本调用qmake
进行工程编译和生成的。
-
若想要编译运行
- 第一种可通过先单击一个
.cpp
文件,后会在右上角出现运行符号,可直接点击也可下拉选择
-
第二种
Ctrl + Shift + P
输入run
,选择运行生成任务- 选择
debug
或者release
- 选择
- 第一种可通过先单击一个
VsCode+QMake+MinGw
-
若是创建工程时选择
MinGw
作为构建套件,QMake
作为构建工具则需要做一些修改 -
修改构建脚本
./scripts/build_debug.bat
- 在创建脚本的时候自动生成的
mingw32-make
的路径是在D:\\Programs\\Qt\\5.15.2\\mingw81_64
下面,这可能是由于我这里是Qt5.15.2
,它不在这个路径下而是D:\\Programs\\Qt\\Tools\\mingw810_64
,读者请根据自身实际情况进行修改。
@echo offtitle qmake and nmake build prompt@REM 修改mingw32-make的路径@REM set MINGW_PATH=D:\\Programs\\Qt\\5.15.2\\mingw81_64 set MINGW_PATH=D:\\Programs\\Qt\\Tools\\mingw810_64set QT_DIR=D:\\Programs\\Qt\\5.15.2\\mingw81_64set BUILD_DIR=%cd%\\buildset PRO_DIR=%cd%set PATH=%MINGW_PATH%\\bin;%QT_DIR%\\bin;%PATH%if not exist %BUILD_DIR% ( md %BUILD_DIR%)cd buildqmake.exe %PRO_DIR%\\VsCodeQMakeMinGw.pro -spec win32-g++ \"CONFIG+=debug\" \"CONFIG+=console\"if exist %BUILD_DIR%\\debug\\VsCodeQMakeMinGw.exe del %BUILD_DIR%\\debug\\VsCodeQMakeMinGw.exe@REM D:\\Programs\\Qt\\Tools\\QtCreator\\bin\\jom.exe -j4%MINGW_PATH%\\bin\\mingw32-make -f Makefile.Debugcd debugif not exist %BUILD_DIR%\\debug\\Qt5Core.dll ( windeployqt VsCodeQMakeMinGw.exe)
- 在创建脚本的时候自动生成的
-
修改运行配置文件
./.vscode/launch.json
-
同样因为
Qt
不同版本的gbd.exe
的调试器路径可能不同这样也需要做出一定修改否则会报错 -
修改
gdb.exe
路径即miDebuggerPath
参数
{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"debug\", \"type\": \"cppdbg\", \"request\": \"launch\", \"program\": \"${workspaceRoot}/build/debug/VsCodeQMakeMinGw.exe\", \"args\": [], \"stopAtEntry\": false, \"cwd\": \"${workspaceRoot}\", \"environment\": [], \"externalConsole\": false, \"MIMode\": \"gdb\", // 修改gdb路径 // \"miDebuggerPath\": \"D:/Programs/Qt/5.15.2/mingw81_64/bin/gdb.exe\", \"miDebuggerPath\": \"D:/Programs/Qt/Tools/mingw810_64/bin/gdb.exe\", \"setupCommands\": [ { \"description\": \"Enable pretty-printing for gdb\", \"text\": \"-enable-pretty-printing\", \"ignoreFailures\": true } ], \"preLaunchTask\": \"debug\" } ]}
-
-
这时候编译运行应该能直接弹出
Qt
窗口了
VsCode+QMake+Msvc
-
VsCode1.93.0 + Qt5.15.2 + Msvc2015
-
创建工程时选择
Msvc
作为构建套件,QMake
作为构建工具时唯一需要注意的就是设置好Qt Configure: Vcvarsall Path
路径,在扩展配置中有说明。 -
若是配置没有问题直接编译运行应该就能看到弹出的
Qt
窗口了。
VsCode+CMake+MinGw
-
VsCode1.93.0 + Qt5.15.2 + CMake3.28.0-rc3 + mingw81_64
-
在创建工程时选择
MinGw
作为构建套件,选择CMake
作为构建工具。 -
构建生成运行
-
第一次运行时需要选择构建器
-
这里请选择
QtBuild
-
-
同时需要修改
./.vscode/launch.json
文件,这样也是修改dgb
的路径,请读者根据自身情况就行修改。{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"QtBuild\", \"type\": \"cppdbg\", \"request\": \"launch\", \"program\": \"${command:cmake.launchTargetPath}\", \"args\": [], \"stopAtEntry\": false, \"cwd\": \"${workspaceRoot}\", \"environment\": [ { \"name\": \"PATH\", \"value\": \"D:/Programs/Qt/5.15.2/mingw81_64/bin\" } ], \"externalConsole\": false, // \"miDebuggerPath\": \"D:/Programs/Qt/5.15.2/mingw81_64/bin/gdb.exe\" \"miDebuggerPath\": \"D:/Programs/Qt/Tools/mingw810_64/bin/gdb.exe\" } ]}
-
对于CMake工程这里还有一种构建运行方式,且好像不用修改
launch.json
文件。 -
项目运行效果
VsCode+CMake+Msvc
-
VsCode1.93.0 + Qt5.15.2 + CMake3.28.0-rc3 + Msvc2015
-
在创建工程时选择
Msvc
作为构建套件,选择CMake
作为构建工具。 -
只有第一次运行时需要选择对应的编译构建器,其它都与VsCode+CMake+MinGw一样。
-
构建生成运行
-
第一次运行时需要选择构建器
-
这里请选择
QtBuild
-
-
运行效果如下
QtCreator+QMake+MinGw->VsCode
-
Qt5.15.2 + QtCreator12.0.1 + VsCode1.93.0 + mingw81_64
-
特别说明:QtCreator和VsCode扩展(Qt Configure)自动创建的工程有些不同,但是都会依赖于pro文件,QMake是基于进行编译生成的
-
使用QtCreator创建一个以
MinGw
为构建套件,QMake
为构建工具的工程,并将其转换为VsCode
工程,并在VsCode
中进行编辑编译并运行。(这里不再赘述QtCreator
工程的创建) -
这里进行说明一下,
Qt
工程文件是.pro
文件,但VsCode并没有明确的工程文件只有工程的配置文件,通过我们前面的VsCode+QMake+MinGw 可以知道其实VsCode
只是将工程编译整合到脚本命令中了,编译时依然会使用.pro
工程。 -
所以我们直接将VsCode+QMake+MinGw 创建的
.vscode
和scripts
文件夹拷贝到QtCreator
创建的工程,并用VsCode
打开。 -
先修改
./scripts/build_debug.bat
脚本- 这里是VsCode+QMake+MinGw 工程创建的脚本进行修改的,可以对比着看。
- 最好不要使用中文,
bat
脚本有时候会因为编码问题导致运行不正常,可将其转换为ASCII
编码,VsCode
默认保存为UTF-8
。
@echo offtitle qmake and nmake build prompt@REM set MINGW_PATH=D:\\Programs\\Qt\\5.15.2\\mingw81_64set MINGW_PATH=D:\\Programs\\Qt\\Tools\\mingw810_64set QT_DIR=D:\\Programs\\Qt\\5.15.2\\mingw81_64@REM set BUILD_DIR=%cd%\\buildset BUILD_DIR=%cd%\\..\\build-QtCreatorQMakeMinGw-Desktop_Qt_5_15_2_MinGW_64_bitset PRO_DIR=%cd%set PATH=%MINGW_PATH%\\bin;%QT_DIR%\\bin;%PATH%if not exist %BUILD_DIR% ( md %BUILD_DIR%)cd %BUILD_DIR%qmake.exe %PRO_DIR%\\QtCreatorQMakeMinGw.pro -spec win32-g++ \"CONFIG+=debug\" \"CONFIG+=console\"if exist %BUILD_DIR%\\debug\\QtCreatorQMakeMinGw.exe del %BUILD_DIR%\\debug\\QtCreatorQMakeMinGw.exe@REM D:\\Programs\\Qt\\Tools\\QtCreator\\bin\\jom.exe -j4%MINGW_PATH%\\bin\\mingw32-make -f Makefile.Debugcd debugif not exist %BUILD_DIR%\\debug\\Qt5Core.dll ( windeployqt %BUILD_DIR%\\debug\\QtCreatorQMakeMinGw.exe)
-
再修改
./.vscode/launch.json
文件,设置运行文件路径{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"debug\", \"type\": \"cppdbg\", \"request\": \"launch\", // \"program\": \"${workspaceRoot}/build/debug/VsCodeQMakeMinGw.exe\", \"program\": \"${workspaceRoot}/../build-QtCreatorQMakeMinGw-Desktop_Qt_5_15_2_MinGW_64_bit/debug/QtCreatorQMakeMinGw.exe\", \"args\": [], \"stopAtEntry\": false, \"cwd\": \"${workspaceRoot}\", \"environment\": [], \"externalConsole\": false, \"MIMode\": \"gdb\", // 修改gdb路径 // \"miDebuggerPath\": \"D:/Programs/Qt/5.15.2/mingw81_64/bin/gdb.exe\", \"miDebuggerPath\": \"D:/Programs/Qt/Tools/mingw810_64/bin/gdb.exe\", \"setupCommands\": [ { \"description\": \"Enable pretty-printing for gdb\", \"text\": \"-enable-pretty-printing\", \"ignoreFailures\": true } ], \"preLaunchTask\": \"debug\" } ]}
-
特别说明:
Qt
的.pro
工程使用的是影子构建,所以这里是build-QtCreatorQMakeMinGw-Desktop_Qt_5_15_2_MinGW_64_bit
,若是自定义构建输出路径,以及中间生成参数请,根据实际路径做修改。 -
项目构建编译运行参考,运行效果如下
QtCreator+QMake+Msvc->VsCode
-
Qt5.15.2 + QtCreator12.0.1 + VsCode1.93.0 + msvc2015
-
使用
QtCreator
创建一个以Msvc
为构建套件,QMake
为构建工具的工程,并将其转换为VsCode
工程,并在VsCode
中进行编辑编译并运行。(这里不再赘述QtCreator
工程的创建) -
在QtCreator+QMake+MinGw->VsCode我们已经说明
QtCreator
到VsCode
操作的基本原理,就不在进行说明了。 -
同样我们拷贝VsCode+QMake+Msvc工程创建的
.vscode
和scripts
文件夹到QtCreator
项目中。 -
修改
./scripts/build_debug.bat
脚本- 这里是VsCode+QMake+Msvc工程创建的脚本进行修改的,可以对比着看。
@echo offset QT_DIR=D:\\Programs\\Qt\\5.15.2\\msvc2015_64set SRC_DIR=%cd%@REM set BUILD_DIR=%cd%\\buildset BUILD_DIR=%cd%\\..\\build-QtCreatorQMakeMsvc-Desktop_Qt_5_15_2_MSVC2015_64bitif not exist %QT_DIR% exitif not exist %SRC_DIR% exitif not exist %BUILD_DIR% md %BUILD_DIR%cd %BUILD_DIR%call \"D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x64%QT_DIR%\\bin\\qmake.exe %SRC_DIR%\\QtCreatorQMakeMsvc.pro -spec win32-msvc \"CONFIG+=debug\" \"CONFIG+=console\"if exist %BUILD_DIR%\\debug\\QtCreatorQMakeMsvc.exe del %BUILD_DIR%\\debug\\QtCreatorQMakeMsvc.exenmake Debugif not exist %BUILD_DIR%\\debug\\Qt5Cored.dll ( %QT_DIR%\\bin\\windeployqt.exe %BUILD_DIR%\\debug\\QtCreatorQMakeMsvc.exe)
-
修改
./.vscode/launch.json
文件,设置运行文件路径{ \"version\": \"0.2.0\", \"configurations\": [ { \"name\": \"Launch\", \"type\": \"cppvsdbg\", \"request\": \"launch\", // \"program\": \"${workspaceRoot}/build/debug/VsCodeQMakeMsvc.exe\", \"program\": \"${workspaceRoot}/../build-QtCreatorQMakeMsvc-Desktop_Qt_5_15_2_MSVC2015_64bit/debug/QtCreatorQMakeMsvc.exe\", \"args\": [], \"stopAtEntry\": false, \"cwd\": \"${workspaceRoot}\", \"environment\": [], \"console\": \"integratedTerminal\", \"preLaunchTask\": \"debug\" } ]}
-
项目构建编译运行参考,运行效果
QtCreator+CMake+MinGw->VsCode
-
Qt5.15.2 + QtCreator12.0.1 + VsCode1.93.0 + CMake3.28.0-rc3 + mingw81_64
-
使用QtCreator创建以MinGw为构建套件,CMake为构建工具的项目,并使用VsCode打开
-
运行
-
选择对应编译器(第一次时选择),会自动编译生成项目。
-
再次点击运行,会选择启动目标,一般是第一个。(这里没有截到图可参考QtCreator+CMake+Msvc->VsCode)
-
运行效果
-
QtCreator+CMake+Msvc->VsCode
-
Qt5.15.2 + QtCreator12.0.1 + VsCode1.93.0 + CMake3.28.0-rc3 + msvc2015
-
使用QtCreator创建以Msvc为构建套件,CMake为构建工具的项目,并使用VsCode打开
-
点击运行,选择对应编译器(第一次时选择),会自动编译生成项目。
-
再次点击运行,会选择启动目标,一般是第一个。
-
运行效果
脚本和配置的通用化
VsCode+QMake
- 优化脚本,适配从QtCtrator创建的工程,适合使用Qt影子构建生成的构建路径。
- 只需要设置编译器路径,编译debug还是release,工程名称TARGET_NAME,以及当前编译器是否是Msvc
@echo offtitle qmake and nmake build promptset TARGET_NAME=VsCodeQMakeset BUILD_NAME=debugset IS_MSVC=1if %IS_MSVC%==1 ( set QT_DIR=D:\\Programs\\Qt\\5.15.2\\msvc2015_64) else ( set QT_DIR=D:\\Programs\\Qt\\5.15.2\\mingw81_64)set PRO_DIR=%cd%for %%A in (\"%QT_DIR%\") do (set \"QT_KIT_NAME=%%~nxA\")for %%A in (\"%QT_DIR%\\..\") do (set \"QT_VERSION=%%~nxA\")set \"QT_VERSION=%QT_VERSION:.=_%\"echo %QT_KIT_NAME%| findstr /i \"msvc\">nulif errorlevel 1 ( set QT_KIT_STR=MinGWset IS_MSVC=0) else ( set QT_KIT_STR=%QT_KIT_NAME:~0,-3%set IS_MSVC=1for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set QT_KIT_STR=%%QT_KIT_STR:%%i=%%i%%)echo %QT_KIT_NAME%| findstr /i \"64\" >nulif errorlevel 1 ( set BIT_STR=32bit) else ( set BIT_STR=64bit)set QT_KIT_STR=Desktop_Qt_%QT_VERSION%_%QT_KIT_STR%_%BIT_STR%set BUILD_DIR=%PRO_DIR%/../build-%TARGET_NAME%-%QT_KIT_STR%set FIRST_CHAR=%BUILD_NAME:~0,1%for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set FIRST_CHAR=%%FIRST_CHAR:%%i=%%i%%set BUILD_NAME_U=%FIRST_CHAR%%BUILD_NAME:~1%if not exist \"%QT_DIR%\" exitif not exist \"%PRO_DIR%\" exitif not exist \"%BUILD_DIR%\" ( md \"%BUILD_DIR%\")if %BUILD_NAME%==\"debug\"( set CONFIG_STR=\"CONFIG+=%BUILD_NAME%\" \"CONFIG+=console\") else(set CONFIG_STR=\"CONFIG+=%BUILD_NAME%\")cd \"%BUILD_DIR%\"if %IS_MSVC%==1 ( goto build_msvc) else ( goto build_mingw):build_msvc call \"D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat\" x64 %QT_DIR%\\bin\\qmake.exe %PRO_DIR%\\%TARGET_NAME%.pro -spec win32-msvc %CONFIG_STR% set TARGET_NAME_ALL=%BUILD_DIR%\\%BUILD_NAME%\\%TARGET_NAME%.exe if exist \"%TARGET_NAME_ALL%\" del \"%TARGET_NAME_ALL%\" nmake %BUILD_NAME_U% goto end:build_mingw set MINGW_PATH=%QT_DIR%\\..\\..\\Tools\\%QT_KIT_NAME:~0,7%0%QT_KIT_NAME:~-3% set PATH=%MINGW_PATH%\\bin;%QT_DIR%\\bin;%PATH% %QT_DIR%\\bin\\qmake.exe %PRO_DIR%\\%TARGET_NAME%.pro -spec win32-g++ %CONFIG_STR% set TARGET_NAME_ALL=%BUILD_DIR%\\%BUILD_NAME%\\%TARGET_NAME%.exe if exist \"%TARGET_NAME_ALL%\" del \"%TARGET_NAME_ALL%\" @REM D:\\Programs\\Qt\\Tools\\QtCreator\\bin\\jom.exe -j4 %MINGW_PATH%\\bin\\mingw32-make -f Makefile.%BUILD_NAME_U% goto end:endif not exist %BUILD_DIR%\\%BUILD_NAME%\\Qt5Cored.dll ( %QT_DIR%\\bin\\windeployqt.exe \"%TARGET_NAME_ALL%\")