安装说明:
当vscode来编辑器,当出现.dll动态库找不到的时候,就搜索一下,然后将其所在的路径添加到环境变量中就好了。或者在launsh.json中添加
"environment": [
     {"name": "PATH", "value": "D:\\lib\\ffmpeg\\bin;%PATH%"}
 ],
打开setting.json:ctrl+shift+P(或者F1),输入”Preferences: Open USER Settings (JSON)” # 可能没有 USER
运行python程序时,它的python debug console终端太丑了,在setting.json里加这么一行就行了: “terminal.integrated.automationShell.windows”: “cmd.exe”,
terminal终端要加添加vs、anaconda、qt这些环境时,去菜单栏看这些prompt快捷方式所在的路径,然后再看其属性,就能知道它是怎么启动那些初始化环境的.bat文件的,就可以仿照着写进win新的终端的配置文件中(老版本是下面5.1win下编译的步骤)
{ // 最外层的大括号是setting.json中最外层的,把下面的内容加入就好
  	
	"terminal.integrated.profiles.windows": {
        "VS2017 x64 Native Tools": {
            "path": [
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [
                "/K",
                // "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
                // 上面这行就是下面这两行的一起的意思
                "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat",
                "x64"      // x64、x86、x86_x64  这三种都行
            ],
            "icon": "terminal-cmd"
        }
    },
  
}
启动黑屏闪退,需要添加一个参数 code.exe –no-sandbox
.bat文件,最后一行可以加一个 pause 这样终端就是vs的那种停住,按任意键运行。
Tips:如果不加参-G,win上会直接生成vs的.sln项目,配置这些还不好搞,这样的话更好的选择就是直接使用cmake-gui。
namke想要开启多核编译的话:
set CL=/MP # 这样设置环境变量,同时编译多个文件 nmake
视频的学习地址:这里。
x86_64-posix-seh名称vscode的插件安装
c/c++ # 相关的三个Microsoft的都装上吧
cmake(装吧)(它的作用是方便看,编辑CMakelests.txt)
==cmake tools==(一定装)(它的作用是使用第三方库时,方便进去看源码,如果禁用掉,第三方库在平时编辑时就点不进去,下面还会有红色的波浪线)它里面还有两个参数设置(我都建议关了)
Configure On Edit 打开的话,一修改CMakelests.txt,就会自动cmake(搜索这个选项,然后在Cmake Tools中)
Configure On Open 打开的话,vscode一打开新文件夹,就会自动cmake配置,会自动创建一个build文件夹,然后让你选择使用哪种编译器: 注意:以下三种都是可以的,自动cmake后,点最下面状态栏的运行符号:triangular_ruler:就会自动编译,接着自动运行或debug(且都不需要写task.json和launch.json文件):
选择mingw的gcc,就会自动生成MinGW Makefiles;
选择侦测到的vs,就会生成.sln的项目;
若想生成vs的NMake Makefiles文件,就去修改这个json文件“C:\Users\Administrator\AppData\Local\CMakeTools\==cmake-tools-kits.json==”,仿照mingw的写法添加一个就好了,这里加一个参考示例吧:
{
    "name": "cl NMake Makefiles - amd64",
    "compilers": {
      "C": "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe",
      "CXX": "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe"
    },
    "preferredGenerator": {
      "name": "NMake Makefiles"
    },
    "environmentVariables": {
      "CMT_MSVC_PATH": "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64"
    }
  },
Tips: name自己起;C/CXX路径都是给到cl.exe的路径;name值注意;要用x86,就添加一个新的x86的路径。这个”CMT_MSVC_PATH”属性名字乱起的,在那时没发觉其用处(因为只是添加cl.exe所在路径是没有的,只能通过vs自来的cmd进来)。
Doxygen Documentation Generator:快速生成注释文件,比如在cpp函数钱,输入/**,然后回车;
python的环境:
可选的插件:
针对Administrator这个用户免密远程的话:
看C:\Users\Administrator\.ssh 路径下是否有秘钥id_rsa之类的,没有的话就生成一个(参见linux.md中的ssh免密或是git中的ssh免密)
vscode中安装插件==Remote-SSH==,选择右边的 Remote Explorer ,然后打开Configure ,再选择
C:\Users\Administrator\.ssh\config
然后改成以下内容:
Host 2080Ti # 起的别名
 HostName 192.168.108.218 # IP地址
 User root # 用户名
 IdentityFile C:\Users\Administrator.ssh\id_rsa
Tips:如果出错,按这两步去尝试修正一下
使用时的一个错误:
 vscode远程开发时,CMakeLists.txt中已经把添加头文件路径写好了的,编译运行过的项目可能没问题,但是刚开始写时,总是会在找头文件时报红线,这样就没有智能提示,就在“.vscode”文件夹下添加这两个json文件用来配置智能提示:
c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            // 主要就是把那些找不到的头文件的路径手动写进来,方便提示,与CMakeLists.txt没有任何关系。总之写的时候,哪个头文件下报红线,就把它的路径添加进来
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/cuda/include",
                "/opt/opencv-4.5.3/install/include/opencv4"
            ],
            "defines": [],
            "compilerPath": "/opt/rh/devtoolset-8/root/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}
settings.json:这个就放进去吧,也是为了方便智能提示,具体作用咋生效不是很清楚。
{
    "files.associations": {
        "*.cpp": "cpp",
        "iosfwd": "cpp",
        "unordered_map": "cpp",
        "array": "cpp",
        "atomic": "cpp",
        "hash_map": "cpp",
        "hash_set": "cpp",
        "strstream": "cpp",
        "*.tcc": "cpp",
        "bitset": "cpp",
        "cctype": "cpp",
        "chrono": "cpp",
        "cinttypes": "cpp",
        "clocale": "cpp",
        "cmath": "cpp",
        "codecvt": "cpp",
        "complex": "cpp",
        "condition_variable": "cpp",
        "csignal": "cpp",
        "cstdarg": "cpp",
        "cstddef": "cpp",
        "cstdint": "cpp",
        "cstdio": "cpp",
        "cstdlib": "cpp",
        "cstring": "cpp",
        "ctime": "cpp",
        "cwchar": "cpp",
        "cwctype": "cpp",
        "deque": "cpp",
        "forward_list": "cpp",
        "list": "cpp",
        "unordered_set": "cpp",
        "vector": "cpp",
        "exception": "cpp",
        "algorithm": "cpp",
        "functional": "cpp",
        "iterator": "cpp",
        "map": "cpp",
        "memory": "cpp",
        "memory_resource": "cpp",
        "numeric": "cpp",
        "optional": "cpp",
        "random": "cpp",
        "ratio": "cpp",
        "regex": "cpp",
        "set": "cpp",
        "string": "cpp",
        "string_view": "cpp",
        "system_error": "cpp",
        "tuple": "cpp",
        "type_traits": "cpp",
        "utility": "cpp",
        "fstream": "cpp",
        "future": "cpp",
        "initializer_list": "cpp",
        "iomanip": "cpp",
        "iostream": "cpp",
        "istream": "cpp",
        "limits": "cpp",
        "mutex": "cpp",
        "new": "cpp",
        "ostream": "cpp",
        "sstream": "cpp",
        "stdexcept": "cpp",
        "streambuf": "cpp",
        "thread": "cpp",
        "cfenv": "cpp",
        "typeindex": "cpp",
        "typeinfo": "cpp",
        "valarray": "cpp",
        "variant": "cpp",
        "__nullptr": "cpp"
    }
}
 简单的使用而不是用cmake的话,就是直接打开一个terminal,然后正常的使用g++命令直接编译构建可执行文件、运行就好了。
下面主要讲下cmake的使用:
CMakeLists.txt文件,里面就简单两行
    Ctrl+Shift+p,输入cmake,一般就是选择第一个的Configure,再选自己装的GCC版本就好了(这一步第一次有,后面可能就没了);cd build、cmake ..、mingw32-make.exe   // 跟linux不太相同的是第三步的make,window下是用的这个命令,一定注意
    cmake -G "MinGW Makefiles" .. 代替cmake ..  (仅第一次这样,后面就可以cmake了,不行的话就还是用这命令吧)3.1.1 ==单个==.cpp文件的debug
create a lunsh.json file,再选择带GBD那个,再就是选择g++.exe那个(这里有可能不会有这个选择,就生成其它模板再改就好了),然后系统就会自动生成相关的配置的json文件,在同级.vscode;3.1.2 ==多个==.cpp文件的dubug
launch.json、tasks.json文件,但这是不能成功运行的,因为它是自动生成的,都是按照默认的名字来的,是不对的,接下来就去修改launch.json:
    "program"这一项,它就是指向我们生成的my_main执行文件,于是我们改成"program": "${fileDirname}/my_main.exe"(其中${fileDirname}是当前文件目录,也就是”cwd”对应的值);还要把最下面那项目"preLaunchTask"给注释掉(这是不对的,下面会说到),因为它是默认生成命令,针对单文件可用。preLaunchTask,对源cpp文件修改后,调试却还是按照上次展示,因为,我们没有使用"preLaunchTask",不会自动编译新的可执行文件,tasks.json文件,它就是来负责重新编译,而preLaunchTask就是与之沟通的路径
    tasks.json,就先Ctrl+Shift+p,输入tasks,选择Configure Task,再选择带有g++的,就会生成tasks.json;tasks.json,主要就是"args",把里面的内容改成用终端g++编译时需要的参数,输入的文件名及路径要跟launch.json中的"program"一致;launch.json最后一行的"preLaunchTask"放开,且主要这个内容也要跟tasks.json的"label"里的内容保持一致。3.1.3 示例json文件
 这里相当于是模仿终端直接使用g++编译的方式,每次debug的时候要是有修改,就会执行tasks.json,它就会自动帮我们编译,就方便直接debug。
{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe 生成活动文件123",
			"command": "D:\\program files\\mingw64\\bin\\g++.exe",
			"args": [     // 给的是编译时的参数
				"-g",
				"main.cpp",
				"swap.cpp",
				"-o",
				"${fileDirname}\\my_main.exe"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: \"D:\\program files\\mingw64\\bin\\g++.exe\""
		}
	]
}
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/my_main.exe",   // 注意这里的路径名
            "args": [],   // 这里是给程序执行时输入的参数
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",  // 项目所在的路径;${fileDirname}是当前文件所在路径
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\program files\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件123"  // 这里跟tasks.json的label保持一致
        }
    ]
}
可能要自己写launch.json和tasks.json,有时候快捷键设置出不来g++的tasks,下面给的例子:
主要针对win下使用mingw的配置示例,主要是launch.json中miDebuggerPath路径的不同,所以特意拿出来,然后tasks.json都是一样的:
launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "这是随意放的一个",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/my_cmake.exe",
            "args": ["-i", '123.mp4'],     // 这里是给程序执行时输入的参数,多个就用逗号隔开
            "stopAtEntry": false,
            "cwd": "${fileDirname}",       // 这里是fileDirname还是workspaceFolder都无伤大雅
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            // "miDebuggerPath": "D:\\Program Files\\mingw64\bin\\gdb.exe",   // 这是错的;这路径虽然是对的,但是不能有大写,不然就不行
            "miDebuggerPath": "D:\\program files\\mingw64\\bin\\gdb.exe",  
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "this_name_should_be_same"   // 注意
        }
    ]
}
Tips:
miDebuggerPath的值是gdb软件的路径,这个路径里是不能用大写字母的,那怕真实路径里有大写字母,也要手动改成小写的。这个主要是把参数的注释写的比较全,用的时候,或者发给别人的时候,用上面的launch.json,一样的
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {	
            // 配置名称,将会在启动配置的下拉菜单中显示(可随意)
            "name": "g++ - Build and debug active file",  
            // 配置类型,对于C/C++可认为此处只能是cppdbg,由cpptools提供;不同编程语言不同
            "type": "cppdbg",  
            "request": "launch",  // 可以为launch(启动)或attach(附加)
            "program": "${workspaceFolder}/build/yolov5_video", // 可执行文件的绝对路径
            // 可执行文件后跟的参数(文件是相对路径)
            // 如果最后给的rtsp地址,这里 & 符号前要加转义才行,
            // 如:"rtsp://192.168.108.132:554/user=admin\\&password=\\&channel=1\\&stream=0.sdp?"
            "args": ["-d", "my_v5l.engine", "../123.mp4"],  
             // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "stopAtEntry": false, 
            
            "cwd": "${workspaceFolder}/build",  // 为了上面args后面的参数可以使用路径
            "environment": [     // 加环境变量,必须是这种格式
                {"name": "DISPLAY", "value": "192.168.108.147:0.0"}, 
                {"name": "abc", "value": "a_test"}
            ],
            // true:就是使用单独的cmd窗口;false:使用内置终端(有显示不全的可能)(现在可能不是这个参数了,去看5.1debug)
            "externalConsole": false, 
            
            "MIMode": "gdb",  // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
            "miDebuggerPath": "/usr/bin/gdb",    // gdb的路径
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
    		// 这里的值跟tasks.json的label保持一致
            "preLaunchTask": "C/C++: g++ build active file",
        }
    ]
}
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"   // 注意这里是 workspaceFolder
    },
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                ".."
            ]
        },
        {
            "label": "make",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "command": "make",      // 后面暂时不要跟 -j4 这种,会报错
            "args": [
            ]
        },
        {
            "label": "C/C++: g++ build active file",  // 这里和laubch.json的`preLaunchTask`值保持一致
            "dependsOn": [
                "cmake",
                "make"
            ]
        }
    ]
}
Tips:
workspaceFolder代表的是这个项目总文件夹的路径,应该所有文件用这个都是一样的;fileDirname是当前正在编辑的文件的路径,不同文件之间可能是有出入的; 这个其实意义不大,很简单,完全可以不看,但还是放这里,后续要复现的话,快速复制过去就行。
swap.h
void swap(int &, int &);
swap.cpp
#include "swap.h"
  
void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}
main.cpp
#include <iostream>
  
#include "swap.h"
  
int main(int argc, char **argv) {
    std::cout << "hello world" << std::endl;
    int a = 13, b = 14;
    std::cout << "交换前:" << std::endl;
    std::cout << a << "\n";
    std::cout << b << "\n";
    swap(a, b);
    std::cout << "交换后:" << std::endl;
    std::cout << a << "\n";
    std::cout << b << "\n";
    std::cout << "执行到这里了" << std::endl;
    return 0;
} 
 点击插件那里,有一个local,下面应该还有SSH:2080Ti-INSTALLED,需要在这里面安装上差不多跟local中一样的python,c++插件才会让debug,可能不好装。我这次也是偶然点出来的就都装上了,主要是点了一个C++的,Add to Workspace Recommendations
 更新:一定要在远程的ssh上安装上C/C++ Extension Pack,这个插件,就搜索起来,多点多试试。
建议:以一个远程项目为一个文件地址远程打开,进行调试,不要远程到/home下,再逐步点到项目里去,因为vscode调试时会创建一个.vscode文件夹,它会放在你最开始远程的路径下,所以为了避免各项目之间的感染,就还是把.vscode创建在项目各自的目录下。
可能出现的问题:远程时,可能断点都打不了,按下F5也都直接报错,那就点这个错误,把python那个Extension卸载了,再重新装,然后再试,一般就可以了。
更改环境,anaconda下有很多环境,在vscode远程窗口左下角可以更改选择具体的环境。当然也可以直接在.vscode目录下修改或是直接添加settings.json文件,内容如下:
{
    "python.pythonPath": "/root/root/anaconda3/envs/yolact_edge/bin/python"
}
一般来说这会自动生成,然后点击左下角修改环境路径时,这个文件里的路径就会跟着变。
==终端带参数的输入调试==,步骤如下:
Run—>Open Configurations—>Python—>Python File
然后它就会自动生成launch.json文件,然后就再手动加入自己终端输入要添加的参数,然后就可以去debug了:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/my_yolov5_trt_video.py",
            "console": "integratedTerminal",
            "justMyCode": true,   // 酌情看要不要这一项
            "args": [
                "--trained_model", "123.pth",
                "--score_threshold", "0.3",
                "--top_k", "10",
                "--display"
            ]
        }
    ]
}
和python基本是一样的,也是以一个远程项目为一个文件地址远程打开。
注意点:每一次修改代码后,按F5开始debug时,会重新make编译,但是因为anaconda环境问题,make可能不会成功,即便从$LD_LIBRARY_PATH中把anaconda相关去掉,自动make还是因为这个失败(这是因为它还在/etc/ld.so.conf.d加入了相关路径,并且这个在$LD_LIBRARY_PATH是不会现实出来的),所以改了代码后,还是自己先在bash中make后,再debug。
现在已经可以远程调试了,还看到一个gdb-server,没用过,暂时放这里,这里吧。
去看docker里面,有详细的说明。下面是以前写的,
我这里并没有用网上说的Remote X11,还是依靠的Xmanger来实现的:
这样子,无论是在xshell中还是vscode远程,运行都能自动调用xmanger来显示图像。(后面的数字,10、11、12都试过,都可以,但是13就不行,不知道为啥)。
 除了使用vscode的这种方式debug,windows中还有一个微软出的专门的debug工具,叫做==WinDbg==,了解一下,可看这里。
在windows下也是可以直接用命令行编译vs的Makefile,而不是.sln工程的:
环境准备:(现在新版不支持自定一终端了,按照最上面去改setting.json文件)
首先把vs的编译器==cl.exe==加入到环境变量,一般它的路径如下(注意使用64的)(这也不是必须,因为执行下面的.bat后,环境都会弄好):
D:\Program Files (x86)\MicrosoftVistualStudio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64;然后==必须用cmd==,不能是powershell(用它就是不行,试过很多次了),然后在cmd中,直接输入执行如下.bat文件:
"D:\Program Files (x86)\MicrosoftVistualStudio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"(记得一定要这对引号),完成环境初始化(这其实就是菜单中vs的工具提示符),然后就可以在这个cmd中进行编译操作了。
Tips:
vscode中,可以配置自己的终端,可以在自定义终端中,不用source来继承一个终端的配置,而是直接使用
// 注意,以下只是其中的一部分
"my_msvc": {
    // "path": "C:\\Windows\\System32\\cmd.exe",
    "path": "D:\\Program Files (x86)\\MicrosoftVistualStudio\\2017\\Community\\VC\\Auxiliary\\Build\\my_msvc.bat\",
    "args": []
}
这个path路径就是上面vcvars64.bat所在路径,我只是在那里面写了一个名为“my_msvc.bat”的文件,里面的内容为:(只是在vcvars64.bat内容后加了一行cmd,不然新打开的终端总是会闪退,先是试着不加。)
@call "%~dp0vcvarsall.bat" x64 %*
cmd
也可以给绝对路径写到bat文件中:@call “D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat”
编译:
注意:nmake 命令其实就是 nmake.exe ,它跟cl.exe在一起,所以要加环境变量才用直接使用。
以上是一种原理,了解一下挺好,但是要直接快速使用,还是按照我写的这个博客来操作。
 5.1中的操作就是win下命令行的编译,用的是msvc的编译器和库,这种就可以直接只用windows下opencv已经编译好的MSVC版本(特别注意:这个已经编译好的版本,win下的mingw是不能使用的),vscode中如下操作:
 注意点:一般就这可以开始debug了,但是同样无法在修改代码后自主nmake,原因跟4.3有些类似,这个需要特定的cmd(即执行了那个.bat脚本的),vscode自主编译时会新建一个powershell就肯定会编译失败,我也尝试把脚本的执行加进tasks.json,验证过了是不行的;  所以同理,一般debug时,就是编译好了的程序,如果有改代码,先去到那个一开始已经弄好的cmd中nmake编译好了先,然后再debug,改一下代码,这样子做一次。
这样子做的两个实例json:
launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "cl.exe - 生成和调试活动文件",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/bin/eyeLike.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            // 注意,win上用ffmpeg库做开发时,可能bin路径没添加进PATH环境变量,能编译成功,但用vscode、预览终端运行时没任何反应,用自带cmd运行才会提示.dll找不到,通过下面的方式来设置环境变量
            "environment": [
            	{"name": "PATH", "value": "D:\\lib\\ffmpeg\\bin;%PATH%"}
            ],
            // 这是会像vs那样打开外部终端,integratedTerminal 则是用自带的终端
            "console": "externalTerminal",      // "console": "integratedTerminal",
            "preLaunchTask": "C/C++: cl.exe 生成活动文件"
        }
    ]
}
tasks.json
新版,不用再提前初始化vs的终端环境,同时也因为任务有了先后顺序,不会再存在第一次进来时,因为cmake没执行完,nmake提示没有Makefile,然后要再运行一次的问题。
{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"   // 注意这里是 workspaceFolder
    },
    "tasks": [
        {
            "label": "build_project",
            "type": "shell",
            "command": "${env:windir}\\System32\\cmd.exe",
            "args": [
                // /k是在cmd执行命令后保持终端窗口打开,这样任务就永远完不成,launch.json依赖于这,就永远不会运行
                "/c",     // /c是命令执行完毕后,按任意键退出,任务就算完成
                "\"D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat\" x64 && cmake -G \"NMake Makefiles\" .. && nmake",
            ]  
			// 上面的是vs2017的地址,vs2020地址可能如下:
            // D:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat
        },
        {
            "label": "C/C++: cl.exe 生成活动文件",  // 这里和laubch.json的`preLaunchTask`值保持一致
            "dependsOn": [
                "build_project",
            ]
        }
    ]
}
旧版本:(对于vs的项目,暂时不会这么用了)
{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"   // 注意这里是 workspaceFolder
    },
    "tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "-G",
                "NMake Makefiles",
                ".."
            ]
        },
        {
            "label": "nmake",
            "group": {
                "kind": "build",
                "isDefault": true,
            },
            "command": "nmake",
            "args": [
    
            ]
        },
        {
            "label": "C/C++: cl.exe 生成活动文件",  // 这里和laubch.json的`preLaunchTask`值保持一致
            "dependsOn": [
                "cmake",
                "nmake"
            ]
        }
    ]
}
 这其实就是vs的cmake配置,在项目根目录里添加“CMakePresets.json”这个文件,然后用vscode打开,vscode最下面的状态栏build、debug、运行的按钮就都能用了,它会完全取代掉launch.json、task.json。我放这里做个参考吧,github上两个项目:rpcs3、slang。
优点:不用launch.json、task.json了,把模板复制进项目就能用,也不用设置vs环境变量,它就是默认编成.sln项目。
缺点:程序运行有问题,以opencv的为例,用之前的方法还是正常的,用这种方法,它会直接打开摄像头失败,不知道为啥。
rpcs3项目里的:
{
  "version": 3,
  "configurePresets": [
    {
      "name": "gcc",
      "generator": "Ninja",
      "binaryDir": "build-gcc",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "USE_NATIVE_INSTRUCTIONS": "ON",
        "USE_PRECOMPILED_HEADERS": "ON",
        "USE_FAUDIO": "OFF",
        "USE_SYSTEM_CURL": "OFF",
        "USE_SYSTEM_ZLIB": "OFF",
        "USE_SYSTEM_LIBPNG": "OFF",
        "USE_SYSTEM_OPENCV": "ON",
        "BUILD_LLVM": "OFF",
        "STATIC_LINK_LLVM": "ON"
      }
    },
    {
      "name": "clang",
      "generator": "Ninja",
      "binaryDir": "build-clang64",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "USE_NATIVE_INSTRUCTIONS": "ON",
        "USE_PRECOMPILED_HEADERS": "ON",
        "USE_FAUDIO": "OFF",
        "USE_SYSTEM_CURL": "OFF",
        "USE_SYSTEM_ZLIB": "OFF",
        "USE_SYSTEM_LIBPNG": "OFF",
        "USE_SYSTEM_OPENCV": "ON",
        "LLVM_ENABLE_LIBCXX": "ON",
        "BUILD_LLVM": "OFF",
        "STATIC_LINK_LLVM": "ON"
      },
      "environment": {
        "CXX": "clang++",
        "CC": "clang"
      }
    },
    {
      "name": "msvc",
      "displayName": "Windows x64",
      "generator": "Visual Studio 17 2022",
      "binaryDir": "build-msvc",
      "architecture": {
        "value": "x64",
        "strategy": "external"
      },
      "cacheVariables": {
        "CMAKE_CONFIGURATION_TYPES": "Debug;Release",
        "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
        "USE_NATIVE_INSTRUCTIONS": "ON",
        "USE_PRECOMPILED_HEADERS": "ON",
        "USE_FAUDIO": "OFF",
        "USE_SYSTEM_CURL": "OFF",
        "USE_SYSTEM_ZLIB": "OFF",
        "USE_SYSTEM_OPENAL": "OFF",
        "USE_SYSTEM_OPENCV": "OFF",
        "BUILD_LLVM": "ON",
        "STATIC_LINK_LLVM": "ON"
      },
      "vendor": {
        "microsoft.com/VisualStudioSettings/CMake/1.0": {
          "hostOS": [
            "Windows"
          ]
        }
      }
    }
  ],
  "buildPresets": [
    {
      "name": "msvc-debug",
      "configurePreset": "msvc",
      "configuration": "Debug"
    },
    {
      "name": "msvc-release",
      "configurePreset": "msvc",
      "configuration": "Release"
    }
  ]
}
slang项目中的:
{
  "version": 6,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 25,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "default",
      "description": "Default build using Ninja Multi-Config generator",
      "generator": "Ninja Multi-Config",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$<CONFIG:Debug>:Debug>"
      }
    },
    {
      "name": "emscripten",
      "description": "Emscripten-based Wasm build",
      "generator": "Ninja Multi-Config",
      "binaryDir": "${sourceDir}/build.em",
      "cacheVariables": {
        "SLANG_SLANG_LLVM_FLAVOR": "DISABLE",
        "CMAKE_C_FLAGS_INIT": "-fwasm-exceptions -Os",
        "CMAKE_CXX_FLAGS_INIT": "-fwasm-exceptions -Os",
        "CMAKE_EXE_LINKER_FLAGS": "-sASSERTIONS -sALLOW_MEMORY_GROWTH -fwasm-exceptions --export=__cpp_exception"
      }
    },
    {
      "name": "msvc-base",
      "hidden": true,
      "inherits": "default",
      "description": "Options specific for MSVC",
      "cacheVariables": {
        "CMAKE_C_FLAGS_INIT": "-D_ITERATOR_DEBUG_LEVEL=0 /MP",
        "CMAKE_CXX_FLAGS_INIT": "-D_ITERATOR_DEBUG_LEVEL=0 /MP"
      }
    },
    {
      "name": "vs2019",
      "inherits": "msvc-base",
      "description": "Visual Studio 2019 project",
      "generator": "Visual Studio 16 2019"
    },
    {
      "name": "vs2022",
      "inherits": "msvc-base",
      "description": "Visual Studio 2022 project",
      "generator": "Visual Studio 17 2022"
    },
    {
      "name": "vs2022-dev",
      "inherits": "msvc-base",
      "description": "Visual Studio 2022 project with debug assisting features",
      "generator": "Visual Studio 17 2022",
      "cacheVariables": {
        "SLANG_ENABLE_IR_BREAK_ALLOC": "TRUE"
      }
    },
    {
      "name": "slang-llvm",
      "inherits": "default",
      "description": "Build slang-llvm from the system LLVM",
      "cacheVariables": {
        "SLANG_SLANG_LLVM_FLAVOR": "USE_SYSTEM_LLVM"
      }
    },
    {
      "name": "generators",
      "inherits": "default",
      "description": "Build the compile time generators used in building Slang",
      "cacheVariables": {
        "SLANG_SLANG_LLVM_FLAVOR": "DISABLE",
        "SLANG_ENABLE_SLANG_RHI": false
      }
    }
  ],
  "buildPresets": [
    {
      "name": "debug",
      "configurePreset": "default",
      "configuration": "Debug"
    },
    {
      "name": "release",
      "configurePreset": "default",
      "configuration": "Release"
    },
    {
      "name": "releaseWithDebugInfo",
      "configurePreset": "default",
      "configuration": "RelWithDebInfo"
    },
    {
      "name": "emscripten",
      "configurePreset": "emscripten",
      "configuration": "Release",
      "targets": ["slang-wasm"]
    },
    {
      "name": "generators",
      "inherits": "release",
      "configurePreset": "generators",
      "targets": ["all-generators"]
    },
    {
      "name": "slang-llvm",
      "inherits": "release",
      "configurePreset": "slang-llvm",
      "targets": ["slang-llvm"]
    }
  ],
  "packagePresets": [
    {
      "name": "base",
      "hidden": true,
      "configurePreset": "default",
      "generators": ["ZIP"],
      "variables": {
        "CPACK_PACKAGE_FILE_NAME": "slang",
        "CPACK_COMPONENTS_ALL": "Unspecified;metadata;slang-llvm"
      }
    },
    {
      "name": "release",
      "inherits": "base",
      "configurations": ["Release"],
      "packageDirectory": "dist-release"
    },
    {
      "name": "releaseWithDebugInfo",
      "inherits": "base",
      "configurations": ["RelWithDebInfo"],
      "packageDirectory": "dist-releaseWithDebugInfo"
    },
    {
      "name": "debug",
      "inherits": "base",
      "configurations": ["Debug"],
      "packageDirectory": "dist-debug"
    },
    {
      "name": "generators",
      "inherits": "release",
      "configurePreset": "generators",
      "variables": {
        "CPACK_PACKAGE_FILE_NAME": "slang-generators",
        "CPACK_COMPONENTS_ALL": "generators"
      }
    },
    {
      "name": "slang-llvm",
      "inherits": "release",
      "configurePreset": "slang-llvm",
      "variables": {
        "CPACK_PACKAGE_FILE_NAME": "slang-llvm",
        "CPACK_COMPONENTS_ALL": "slang-llvm"
      }
    }
  ],
  "workflowPresets": [
    {
      "name": "debug",
      "steps": [
        {
          "type": "configure",
          "name": "default"
        },
        {
          "type": "build",
          "name": "debug"
        },
        {
          "type": "package",
          "name": "debug"
        }
      ]
    },
    {
      "name": "release",
      "steps": [
        {
          "type": "configure",
          "name": "default"
        },
        {
          "type": "build",
          "name": "release"
        },
        {
          "type": "package",
          "name": "release"
        }
      ]
    },
    {
      "name": "releaseWithDebugInfo",
      "steps": [
        {
          "type": "configure",
          "name": "default"
        },
        {
          "type": "build",
          "name": "releaseWithDebugInfo"
        },
        {
          "type": "package",
          "name": "releaseWithDebugInfo"
        }
      ]
    },
    {
      "name": "generators",
      "steps": [
        {
          "type": "configure",
          "name": "generators"
        },
        {
          "type": "build",
          "name": "generators"
        },
        {
          "type": "package",
          "name": "generators"
        }
      ]
    },
    {
      "name": "slang-llvm",
      "steps": [
        {
          "type": "configure",
          "name": "slang-llvm"
        },
        {
          "type": "build",
          "name": "slang-llvm"
        },
        {
          "type": "package",
          "name": "slang-llvm"
        }
      ]
    }
  ]
}
 描述:根据群里看到,断点开始debug后,并不显示当前代码里的局部变量。
 解决办法:在launch.json中添加一行==”justMyCode”:false==。
先ctrl+shift+p,然后输入==run task==,一般第一次会让创建一个task.json,然后在里面写上这些验证内容:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "my_msvc",
            "type": "shell",
            "command": "echo",
            "args": [
                "${workspaceFolder}"
            ],
        }
    ]
}
然后在ctrl+shift+p,选择run task来执行就可以获得${workspaceFolder}变量是什么,也可以直接在command中直接写上==”command”: “echo ${workspaceFolder}”==,也可以是其它的要执行的命令。
如果要改task.json中的内容,一般是在第二次往后可能会用到,在输入run task选择后,就会出现第一次配置的task.json的名字,这个例子就是上面的“my_msvc”,然后点击后面的设置图标就能进来修改内容了。
vscode是可以像vs、pycharm那样运行到光标所在行的,有如下三种方式: