vscode配置调用visual studio的编译和调试环境

https://blog.csdn.net/qq_37429313/article/details/120588483
https://blog.csdn.net/weixin_45717218/article/details/121720410
0.安装 visual studio 2019, 带 windows Sdk 10。
方法1:
1.安装扩展 Easy C++ Projects
2.打开命令面板(ctrl+shift+p),输入 >easy, 选择新建C++工程
  选择2019 MSVC工具集。
3.Easy自动从国外网站下载配置清单。下载失败,则使用当前目
  录下的配置好的json文件。
方法2:
1.安装扩展 "C/C++ Runner"
2. 配置文件
  .c_cpp_properties.json    配置编译环境(cl.exe),
  settings.json
3. 配置 Runner 调试
方法3:
1. 基本调用3条命令解决:
   (1) vcvarsall.bat
   (2) cl.exe /c "xxx.cpp"
   (3) link.exe /MACHINE: /out:xx/xx.exe
   (4) (2)和(3)可以合并:cl "xxx.cpp" /link /out:xx/xx.exe
2. 上面的命令,配置成两个json:
   launch.son
   task.json
3. lauch.son 调用 task.json。task.json调用"vcvarsall.bat"配置编译环境,
   接着调用多个"Command"如: cl.exe, link.exe等,然后调用自己写的清理脚本(Clean.bat)
4.tasks.json 里"vcvarsall.bat"配置程序运行的VS环境,
  使用Everything工具搜索位置,把完整路径加入到"args"参数里.
5."cppvsdbg"配置项使用“ms-vscode.cpptools-1.11.5-win32-x6”
  扩展里的vsdbg.exe来调试程序。
6.CleanRubbish.bat 清理编译生成的文件
7.notepad++ + Hex-Editor 查看是否64位
  

以下展示方法3的配置文件:

//launch.json
{
  // 使用 IntelliSense 了解相关属性。 
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "2.0.0",
  "configurations": [
    {
      "name": "cl.exe - 生成和调试活动文件",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
      "args": [
      ],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "logging": {
        "moduleLoad": false,
        "trace": true
      },
      // "showDisplayString": true,
      // "visualizerFile": "${workspaceRoot}/my.natvis",
      // 使用.nativs处理显示数据,参考:
      // https://docs.microsoft.com/visualstudio/debugger/create-custom-views-of-native-objects
      // http://t.zoukankan.com/yilang-p-12432873.html
      // "requireExactSource": true,
      "console": "integratedTerminal", //使用内置终端
      //"console": "externalTerminal",
      "preLaunchTask": "cl.exe build active file",
      "postDebugTask": "delete extra files"
    }
  ]
}
//tasks.json
{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "cmd.exe",
        "args": [
          "/C",
          // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
        // 仿制"Developer Command Prompt for VS 2019.lnk"
          // "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/Tools/VsDevCmd.bat\"",
          // cmd> vcvarsall.bat --help
          "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvarsall.bat\" x64 10.0.19041.0",
          "&&"
        ]
      }
    }
  },
  "tasks": [
    {
      "label": "cl.exe build active file", //要跟lunch中的preLaunchTask一致
      "type": "shell",
      // 多Command方式参考"Compound tasks":https://code.visualstudio.com/docs/editor/tasks#vscode
      "command": "cl.exe", 
      // 按类别列出的编译器选项
      // https://docs.microsoft.com/zh-cn/cpp/build/reference/compiler-options-listed-by-category?view=msvc-160
      "args": [
        //预处理器
        // "/C",           //在预处理期间保留注释。
        // "/D{=|#}", //定义常数和宏。
        // "/I",      //在目录中搜索包含文件。
        // "/FI",    //预处理指定的包含文件(.h)等。
        // "/FU",    //强制使用文件名,就像已传递给指令 #using 一样。::指定要在此编译中引用的元数据文件。
                           //参考元编程:http://t.zoukankan.com/magicbowen-p-5533306.html
        // "/PD",          //打印所有宏定义。
        //优化
        "/Od",          //禁用优化
        //代码生成
        "/EHsc",        //启用C++异常:只处理在 throw 语句或函数调用中的异常;catch(...)子句不会 catch 异步构造异常。
        // "/fp:precise",  //“precise”浮点模型;结果可预测。
        // "/Gd",          //默认选项,使用 __cdecl 调用约定。 (仅限 x86)
        // "/Gm-",      //vs2019已弃用。 启用最小重新生成。
        // "/GR-",      //不启用运行时类型检查(RTTI),默认为打开。
        "/GS",          //启动安全检查,可检测堆栈缓冲区溢出。
        //"/GZ",        //已弃用。启用快速检查。 (与 /RTC1) 相同
        // "/I",      //在目录中搜索包含文件。
        // "/RTC1",        //启用等效于 (/RTCsu) 的快速运行时检查。
        // "/RTCs",     //启用堆栈帧运行时检查。
        // "/RTCu",     //启用未初始化的本地使用情况检查。
        //诊断
        // "/diagnostics:column",  //编译时报告发现问题的行号和列号
        // "/sdl",         //启用更多安全功能和警告。
        "/W3",          //警告等级3
        // "/w",           //禁用所有警告。
        // "/wo",       //仅显示指定的警告一次。
        // "/WX-",         //不将警告视为错误
        //链接
        "/MDd",         //多线程动态链接Debug版本,调用库(MSVCRT.lib + MSVCR80.DLL),为默认选项
        //"/MTd",       //多线程静态链接Debug版本,调用库(LIBCMT.lib)
        //"/options:strict"   //无法识别的编译器选项视为错误。
        //语言
        // "/std:c++14",	    //C++14 标准 ISO/IEC 14882:2014 (默认) 。
        // "/std:c++17",      //C++17 标准 ISO/IEC 14882:2017。
        // "/std:c++20",      //C++20 标准 ISO/IEC 14882:2020。
        // "/std:c++latest",	//最新的 C++ 标准预览版功能草稿。
        // "/std:c11"	        //C11 标准 ISO/IEC 9899:2011。
        // "/std:c17"	        //C17 标准 ISO/IEC 9899:2018。
        // "/permissive-", //设置C++标准一致性模式。此选项禁用宽松行为,并设置 /Zc 编译器选项以执行严格的符合性。 
        // "/Zc:wchar_t",  //指明 wchar_t 为内置类型
        // "/Zc:forScope", //指定标准行为是使 for 循环的初始值设定项在 for 循环之后超出范围。 
        // "/Zc:inline",   //内置函数或数据的声明和定义必须写一块,定义即是声明。(/Od 或 /GL 会使该项无效)
        "/ZI",          //将调试信息包含在与“编辑并继续”兼容的程序数据库中。 (仅 x86 和 x64 处理器可用)
        //杂项
        "/nologo",      //显示执行命令。取消显示登录版权标志。
        // "/c",           //编译但不链接。仅创建 .obj 文件。
        // "/JMC",         //调试功能,可自动单步跳过系统、框架和其他非用户代码调用。
        // "/Tp",    // /Tp 指定非C++源文件为C++源文件。
        // "/TP",          // /TP 指定当前命令行所有文件为C++源文件
        // "/FC",          //显示在诊断文本中传递给 cl.exe 的源代码文件的完整路径。
        // "/errorReport:prompt",//已弃用。 从 Windows Vista 开始,错误报告由 WINDOWS 错误报告 (WER) 控制。
        // "/showIncludes", //在编译期间显示所有包含文件的列表。
        // "/source-charset:[IANA_name | .CPID]"  //	设置扩展的源字符集。如果代码存在多种字符(ASCII,UTF8,UNICODE)等建议配置该项。
        //
        // "/Fd\"x64\\Debug\\vc142.pdb\"",
        // "/Fo\"x64\\Debug\\\"",
        // "/Fe:${workspaceFolder}/${fileBasenameNoExtension}.exe", //指定编译器创建的 .exe或 DLL 的名称和目录。下一行必须紧跟路执行程序路径。
        // "/Fe:${file}"
        // "/Fe:${fileDirname}/${fileBasenameNoExtension}.exe",
        "../${fileBasenameNoExtension}.cpp",
        "/link",
        "/SUBSYSTEM:CONSOLE", //生成控制台程序
        "/MACHINE:X64",       //生成64位程序
        "/DEBUG:FASTLINK",    //生成调试信息
        "/INCREMENTAL",       //启用增量链接
        "/TLBID:1",
        "/DYNAMICBASE",       //使用地址空间布局随机化,加载时随机重新定基
        "/NXCOMPAT",          //指示可执行文件与 Windows 数据执行保护功能兼容
        //"/VERBOSE",            //打印链接器进度消息。
        // "/VERSION",           //分配版本号。
        // "/MANIFEST",          //创建并行程序集清单, 紧跟下一行为清单文件详细信息
        // "\"/MANIFESTUAC:level='asInvoker' uiAccess='false'\"",
        // // 程序集清单包括:程序集名称、版本信息、签名文件(hash值)、包含文件列表、文件类型列表、依赖库、安全权限列表、UAC级别、定制属性、产品信息等。
        // "/manifest:embed",
        // "/dll",               //链接生成.dll文件
        "/OUT:${workspaceFolder}/${fileBasenameNoExtension}.exe",
        "/PDB:${workspaceFolder}/${fileBasenameNoExtension}.pdb",
        // "/LIBPATH:${dir}",    //依赖库目录
        // "kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib",        
        "/IMPLIB:${workspaceFolder}/${fileBasenameNoExtension}.lib",  //生成导入库(xx.lib)时指定文件名,没生成导入库时忽略该项
        // "${workspaceFolder}/${fileBasenameNoExtension}.obj"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
          "kind": "build",
          "isDefault": true
      }
    },
    {
      "type": "shell",
      "label": "delete extra files",
      "command": "${workspaceFolder}/CleanRubbish.bat"
    }
  ]
}
//CleanRubbish.bat
@echo off
set path=%fileDirname%
for /r %path% %%s in (*.exe *.ilK *.obj *.pdb) do (
    del /f /s /q "%%s"
)

vscode配置调用visual studio的编译和调试环境_第1张图片

 

8.未能完美解决的是VS的有些代码格式在编辑阶段会提示错误,但实际编译没错。

你可能感兴趣的:(c++,Json,vscode,vscode,visual,studio,ide)