catch (ENV)-配置VSCode编译调试Visual Studio C++项目

一。为什么放弃在Visual Studio IDE下Coding?

  1. PC有点拉跨,启动Visual Studio加载环境较慢,PC上装了多套VS,旧版本加载速度还行,但较新的版本如Visual Studio 2019,频繁地“无法响应并等待”太捉急
  2. VSCode是一款相当优秀的编辑器,有强大的插件支持,简单说就是在其下Coding,效率起飞
  3. 由于第2点描述,其他日常编码工作如shell脚本、golang等已全面切换至VSCode,想要All in One

二。那么,开始配置前,需要了解和做些什么?

  1. VSCode是且只是编辑器,虽然通过插件的支持可以进行构建和调试项目,但它不是IDE,它的天职是编辑,至于构建过程如编译链接就该给谁做就给谁做好了
  2. 安装VSCode与必要插件,

三。*踩坑摸索

  1. 网上查资料看有没类似案例,残念,要么大部分都是配置mingw,链接没点开直接弃;要么是按照VSCode官方配置MSVC,见Configure Visual Studio Code for Microsoft C++,概览后直接弃,单纯不喜欢,只想启动VSCode直接有个干净的开发环境,想写C++写C++,想写脚本写脚本,想让我通过开发环境命令行启动VSCode?不可能的;最后在一位国外老哥的一篇配置文章中,见https://dev.to/masoudr/build-and-debug-c-application-with-vscode-and-msvc-pfc,看到了些许希望,开坑
  2. 坑很大,填一个又来一个,边填边学,

(可以在第一个引号前加@进行欺骗来规避,不再赘述踩坑流程)

"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-05-09

标签:变量   脚本   路径   加载   命令   环境   文件   目录   程序   项目   工程

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top