一。为什么放弃在Visual Studio IDE下Coding?
二。那么,开始配置前,需要了解和做些什么?
三。*踩坑摸索
(可以在第一个引号前加@进行欺骗来规避,不再赘述踩坑流程)
"buildCommand": "C:Program^ Files^ ^(x86^)Microsoft^ Visual^ Studio2019EnterpriseCommon7ToolsVsDevCmd.bat && cl"
他用&&连接命令,但实际上达不到他想要的效果。他是想先加载构建环境,加载成功后使用构建环境里的cl编译命令,但cl执行时,环境并未加载进来,可如此验证
打开cmd.exe,执行类似命令行语句(如使用PC上的VS2010环境)
这是正确加载到了构建环境的输出,注意cl的版本信息
重新打开cmd.exe(原先的cmd窗口里已存在构建环境,所以必须重新打开一个新的cmd窗口,这里也是容易疏忽踩坑的地方),再次执行命令行语句
cl却无法正确识别,说明cl执行时环境加载失败,原因未找到详细解释,应该和cmd批处理机制有关,未深究;实际上我一开始执行此命令是成功的,原因是安装VS2015的时候自动设置了PATH变量,所以cl调用的是VS2015的开发环境里cl命令,现在PATH里删除了该配置固报错,这也是前文提示注意cl版本信息的原因
尽管外国老哥的build命令存在问题,但却提供了构建思路,即先加载构建环境,然后调用构建工具,这也与VSCode官方方式通过开发环境cmd启动VSCode的描述相吻合;由于受到项目等种种约束,我这里的构建方式也明确下来了
四。开搞
1.编写外部构建脚本
2.settings.json配置自定义变量
主要关注几个使用绝对路径而未引用VSCode配置变量的地方,用来配置intellisense系统include,以及外部构建脚本build-vs.bat路径
其中,
Project.Builder -- 使用哪个VS版本进行构建
Project.SlnFile -- 工程sln文件名,这里自动设置为工作目录名.sln,一般工程名与目录名相同
Project.Target -- 工程目标文件,这里自动设置为工作目录名.exe,一般目标文件名与目录名相同
Project.Include -- 工程include目录,会与系统配置的include目录一起配置intellisense的include路径
Project.Debug.CWD -- 调试程序启动时的当前工作目录,一般设置为生成最终目标文件的目录,如Debug,里面包含调试所需的pdb文件
Project.Debug.Program -- 调试目标程序名
Project.Debug.Args -- 目标程序的传参
Project.Debug.PreTask -- 调试程序启动前置task标识,根据tasks.json来设置
C_Cpp.default.* -- 用来配置intellisense相关配置,我这里是想把所有要变动的配置都配置在一个文件里,剩下的配置都是几乎不动的,所以写在settings.json里,当然都是可以配置进c_cpp_properties.json里的;如果想全都要,成,在c_cpp_properties.json配置项里使用${default}里引用C_Cpp.default相对应的值
3.tasks.json配置构建任务
这里配置构建task,以shell的形式执行外部构建脚本,其中,
label -- task标识
command -- 外部构建脚本,在userspace settings.json里配置的变量
args -- 外部构建脚本传参,在workspace settings.json里配置的相关变量
options->cwd -- 运行构建脚本时的当前工作目录,即工程目录,因为其包含了sln文件,这样就不用指定sln文件的绝对路径
4.launch.json配置调试启动
这里配置调试器启动配置,其中,
type -- cppvsdbg,windows c++调试器
request -- launch,启动,还可以配置attach,是附加到现有进程上去,这里不用
program -- 调试目标程序,在workspace settings.json里配置的变量
args -- 目标程序的传参,在workspace settings.json里配置的变量
cwd -- 调试程序启动时的当前工作目录,在workspace settings.json里配置的变量
environment -- 环境变量,如目标程序链接时是静态链接到dll的lib,而且dll又不在默认的搜索目录里,就需要把它所在的目录加入到环境变量里,不然启动目标程序的时候会因找不到dll而报错,具体追加环境变量的写法
preLaunchTask -- 调试程序启动前的前置task,在workspace settings.json里配置的变量
console -- 如果默认internalTerminal,在调试过程中的打印不会立即输出到终端上,需要等到程序运行结束才会输出;这里可选配置integratedTerminal,externalTerminal
5.*c_cpp_properties.json配置intellisense智能提示,根据官方文档配置即可,如果配置了C_Cpp.default.*,则这个文件不是必须的
6.运行调试
五。资源
配置文件和案例见(https://github.com/VVVylin/vsc-debug-vsproj-msbuild)
页面更新:2024-03-12
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号