zoukankan      html  css  js  c++  java
  • [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码

    1、在.vscode目录下,新建以下几个配置文件,当然也可以通过vscode命令自动生成,如果你已有这些文件直接修改即可。

    c_cpp_properties.json(代码提示):

     1 {
     2   "configurations": [
     3     {
     4       "name": "Win32",
     5       // 设置windows sdk版本
     6       "windowsSdkVersion": "10.0.18362.0",
     7       // 设置msvc编译器路径
     8       "compilerPath": "D:/ProgramData/Microsoft/VisualStudio/IDE/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe",
     9       // 智能提示会从这里搜索头文件
    10       "includePath": [
    11         "${workspaceFolder}/third_party/SDL2-2.0.10/include",
    12         "${workspaceFolder}/third_party/ffmpeg-4.2-win64/include"
    13       ],
    14       "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
    15       // 使用msvc类型的智能提示
    16       "intelliSenseMode": "msvc-x64"
    17     }
    18   ],
    19   "version": 4
    20 }

    tasks.json(编译):

     1 {
     2   "tasks": [
     3     {
     4       "type": "shell",
     5       // 标示名
     6       "label": "msvc build",
     7       // 要执行的命令,这里用了一个bat脚本来构建
     8       "command": "build.bat",
     9       // 命令参数
    10       "args": ["${fileBasename}", "build", "${fileBasenameNoExtension}"],
    11       "group": {
    12         "kind": "build",
    13         "isDefault": true
    14       },
    15       "presentation": {
    16         "echo": true,
    17         "reveal": "always",
    18         "focus": false,
    19         "panel": "shared",
    20         "showReuseMessage": true,
    21         "clear": false
    22       },
    23       "problemMatcher": "$msCompile"
    24     }
    25   ],
    26   "version": "2.0.0"
    27 }

    launch.json(调试):

     1 {
     2   // 使用 IntelliSense 了解相关属性。
     3   // 悬停以查看现有属性的描述。
     4   // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
     5   "version": "0.2.0",
     6   "configurations": [
     7     {
     8       "name": "(msvc) Launch",
     9       "type": "cppvsdbg",
    10       "request": "launch",
    11       // 要调试的程序
    12       "program": "${fileBasenameNoExtension}.exe",
    13       // 程序运行参数
    14       "args": ["../sample.mp4"],
    15       // 是否在入口自动断点
    16       "stopAtEntry": false,
    17       // 工作目录
    18       "cwd": "${workspaceFolder}\build",
    19       "environment": [],
    20       "externalConsole": false,
    21       // 先编译,再调试,对应tasks.json中的标示
    22       "preLaunchTask": "msvc build"
    23     }
    24   ]
    25 }

    settings.json(vscode终端配置):

    1 {
    2   // 要使用cmd终端,其他终端会有兼容问题
    3   "terminal.integrated.shell.windows": "C:/WINDOWS/System32/cmd.exe"
    4 }

    2、在根目录下创建构建脚本,构建脚本主要是配置msvc环境,配置cl.exe的构建参数(头文件、链接库等)

     build.bat(构建脚本,可根据需要自行更改):

     1 @echo off
     2 
     3 REM %1: target file with ext
     4 REM %2: build path
     5 REM %3: output file without ext
     6 
     7 REM https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=vs-2019
     8 call "D:ProgramDataMicrosoftVisualStudioIDEVCAuxiliaryBuildvcvarsall.bat" x64 10.0.18362.0
     9 
    10 REM create build directory
    11 if not exist %2 md %2
    12 
    13 set compilerflags=/Od /Zi /EHsc /Fd%2 /Fo%2
    14 
    15 set linkerflags=/OUT:%2%3.exe
    16 
    17 REM includes
    18 set includes=
    19 for %%i in (^
    20     third_party/SDL2-2.0.10/include,^
    21     third_party/ffmpeg-4.2-win64/include) do call :concat %%i
    22 
    23 REM libs
    24 set libs=^
    25     third_party/SDL2-2.0.10/lib/x64/SDL2main.lib^
    26     third_party/SDL2-2.0.10/lib/x64/SDL2.lib^
    27     third_partyffmpeg-4.2-win64libavformat.lib^
    28     third_partyffmpeg-4.2-win64libavcodec.lib^
    29     third_partyffmpeg-4.2-win64libavutil.lib
    30 
    31 REM compile with msvc
    32 cl.exe %compilerflags% %libs% %1 %includes% /link %linkerflags%
    33 
    34 goto :eof
    35 
    36 REM concat includes path
    37 :concat
    38     set includes=%includes% /I %1
    39 goto :eof
  • 相关阅读:
    Theme.AppCompat.Light报错
    在Eclipse添加Android兼容包( v4、v7 appcompat )
    如何从Eclipse导入github上的项目源码
    一个C#多线程的工作队列
    是否需要手动执行DataContext的Dispose方法?
    Unity3d 销毁
    Unity3d 碰撞检测
    unity3d 鼠标事件
    Unity3d 刚体
    unity3d 让物体移动到点击位置
  • 原文地址:https://www.cnblogs.com/DarkMaster/p/11953425.html
Copyright © 2011-2022 走看看