做网站销售好吗,广州快速建站公司推荐,sem网络推广公司,建设电子元器件网站使用 VSCode 开发 C/C 程序 , 涉及到 工作区的.vscode文件夹下的3个配置文件#xff08;均可以手动创建#xff09; :
① tasks.json : 编译器构建 配置文件 ;
② launch.json : 调试器设置 配置文件 ;
③ c_cpp_properties.json : 编译器路径和智能代码提示 配置文件 ;
…使用 VSCode 开发 C/C 程序 , 涉及到 工作区的.vscode文件夹下的3个配置文件均可以手动创建 :
① tasks.json : 编译器构建 配置文件 ;
② launch.json : 调试器设置 配置文件 ;
③ c_cpp_properties.json : 编译器路径和智能代码提示 配置文件 ;
下面开始逐个生成 上述配置文件
涉及到的常用保留字
${userHome} -用户的主文件夹路径${workspaceFolder} -在VS Code中打开的文件夹路径${workspaceFolderBasename} -在VS Code中打开的文件夹名不带任何斜杠(/) //不是路径${file} -当前打开的文件${fileWorkspaceFolder} -当前打开文件的工作空间文件夹${relativeFile} -当前打开的文件相对于工作区文件夹${relativeFileDirname} -当前打开的文件相对于工作区文件夹的dirname目录名${fileBasename} -当前打开的文件的basename${fileBasenameNoExtension} -当前打开的文件的basename没有文件扩展名${fileExtname} -当前打开的文件的扩展名${fileDirname} -当前打开文件的文件夹路径${fileDirnameBasename} -当前打开的文件的文件夹名称${cwd} -任务运行器在VS Code启动时的当前工作目录${lineNumber} -当前在活动文件中选择的行号${selectedText} -当前在活动文件中选择的文本${execPath}—正在运行的VS Code可执行文件的路径${defaultBuildTask} -默认构建任务的名称${pathSeparator} -操作系统用来分隔文件路径中组件的字符
一、tasks.json 编译器构建配置文件
tasks.json 编译器构建配置文件 , 用于告诉 VSCode 如何去编译这个程序 ;
1、创建
菜单栏选择 终端 / 配置默认生成任务 或者快捷键CtrlShiftP调出命令面板输入tasks选择Tasks:Configure Default Build Task进行配置。 在弹出的对话框中 , 选择第 2 项 , C/C:g 生成活动文件 选项 ; 点击该选项 , 即可在 .vscode 目录中生成 tasks.json 文件如下 {version: 2.0.0,tasks: [{type: cppbuild,label: C/C: g build active file,command: /usr/bin/g,args: [-fdiagnostics-coloralways,-g,${file},-o,${fileDirname}/${fileBasenameNoExtension}],options: {cwd: ${fileDirname}},problemMatcher: [$gcc],group: {kind: build,isDefault: true},detail: compiler: /usr/bin/g}]
}注 VScode支持使用 ${variableName} 语法在配置文件中实现键值字符串的变量替换。
2、分析
label: C/C: g 生成活动文件, 是编译 C/C 任务名称 , 该任务名称可以自定义 ;
command: /usr/bin/g, 中的 command 配置 , 是指定编译器 , 一般是 gcc 或者 g 编译器 ;
args 数组 , 配置的是 command 指定的编译器后的编译选项。args 数组包含将传递给 g 的命令行参数必须按照编译器预期的顺序指定。${file}表示当前打开的待编译的活动文件对它进行编译并在当前路径${fileDirname}生成与活动文件同名无后缀的可执行文件${fileDirname}/${fileBasenameNoExtension}。 args: [-fdiagnostics-coloralways,-g,${file},-o,${fileDirname}/${fileBasenameNoExtension}],
group 中的 isDefault: true 指的是 , 使用 Ctrl Shift B 快捷键可以运行该任务 如果设置为 false , 需要从终端菜单中 , 选择 运行任务 来编译运行程序TerminalRun Build Task group: {kind: build,isDefault: true},
3、执行编译①回到活动文件helloworld.cpp
②执行tasks.json中定义的编译任务。快捷键ctrlshiftB或者从菜单中选择运行TerminalRun Build Task。
③任务开始时源代码编辑器下方将出现集成终端面板。任务执行完成后终端会显示编译结果对于成功的 g编译输出类似如下
④如下图点击按钮将创建一个以当前工作目录本案例中是helloworld默认运行的shell终端。输入指令ls查看当前目录下所有文件可以看到编译生成的可执行文件helloword。
⑤终端中输入 ./helloworld ,即可运行可执行文件helloworld
4、修改task.json
可以修改 tasks.json来满足一些特定需求。比如,
将${file}替换“${workspaceFolder}/*.cpp”来构建多个 C 文件;
将“${fileDirname}/${fileBasenameNoExtension}”替换为硬编码文件名如“helloworld.out”来修改输出文件名。
二、c_cpp_properties.json 编译器路径和智能代码提示配置文件
这个json是C或C语言按需配置的文件。可以告诉VSCode查找include文件的路径C文件和CPP文件的解析标准等。
1、创建
快捷键CtrlShiftP调出命令面板输入C/C选择Edit Configurations(UI)进入配置。设置编辑器路径和IntelliSense模式。
2、解析{configurations: [{name: Linux,includePath: [${workspaceFolder}/** // **表示递归搜索该文件夹下所有文件],defines: [],compilerPath: /usr/bin/gcc, // 告诉系统编译器地址cStandard: c89, // 告诉系统对C文件使用的C标准cppStandard: c98 // 告诉系统对CPP文件使用的C标准intelliSenseMode: linux-gcc-x64 // 不是太清楚大概是告诉系统智能识别的模式。}],version: 4
}三、lunch.json 调试器设置 配置文件
1、创建
launch.json 文件用于在 Visual Studio Code 中配置调试器。接下来将创建launch.json 文件。
从主菜单中选择 Run Add Configuration...选择C (GDB/LLDB)。 之后将看到展示各种预定义调试配置的下拉列表,选择 g build and debug active file。将自动生成launch.json文件。 2、分析参考示例 {//Use Intellisense to learn about possible attributes.//Hover to view descriptions of existing attributes.//For more information,visit: https://go.microsoft.com/fwlink/?linkid830387version:0.2.0,configurations:[{name:myexe : makefile build and debug, //name随便取用来在定义了多个configuration的时候区分执行的是哪一套参数。type:cppdbg, //这个一般就不要改了这个我还不了解其他的参数配置request:launch, //这个一般就不要改了这个我还不了解其他的参数配置program:${workspaceRoot}/myexe, //执行这个文件相当于命令行中输入这行args:[param1,param2,21,,out], //program的参数相当于命令行中在program后输入用空格隔开的这些参数。我这里前两个是执行文件自带的参数设置后三个是将标准输出和标准错误输入到文件out中。stopAtEntry:false, //大概是表示是否在main函数处停下类似在main上打断点。cwd:${workspaceRoot}, //表示在哪个目录下执行program相当于命令行中输入cd 该行environment:[] //不知道干嘛的//externalConsole:true, //如果使用控制台则需要打开这个。我这边加了这句后会有不知道在使用哪个控制台的问题反正会很奇怪就注释掉了。MIMode:gdb, //使用哪个工具作为调试工具只有两个选择gdb或lldb。lldb我不了解和我一样不了解的人就写gdb吧。miDebuggerPath:/usr/bin/gdb, //调试工具的路径setupCommands:[ //gdb相关的一些设置命令相当于在执行gdb后对gdb下命令行的设置。gdb相关的初始化配置要在~/.gdbinit文件中配置或者在这配置我另开一篇文章写涉及下面enable-pretty-printing的不一定开了就有用了还涉及其他的问题这里先放个TODO。{description:Enable pretty-printing for gdb, //给人看的描述text:-enable-pretty-printing, //gdb下执行的命令启用整齐打印就是让gdb打印的东西好看一点。ignoreFailures:true //并不清楚这个实际用来干嘛},{description:Let User defined signal 1 not appear,text:handle SIGUSR1 nostop noprint, //这个命令是我自己加的因为我的程序会莫名奇妙出现调试时在非断点出停下的问题用这个可以规避/忽视这个问题。ignoreFailures:true //并不清楚这个实际用来干嘛}],//internalConsoleoptions:openOnSessionstart, //不知道干嘛的preLaunchTask:build //执行program前需要执行的task这里需要和task.json中要执行的task的label一致//preLaunchTask: //如果没有tasks.json或者不需要执行前置task则可以这样写或不写这行。这种情况一般是你已经有了带调试信息的可执行文件不要在再通过编译等操作得到了。}]
}
settings.json 在tasks.json的配置中我们提到了settings.json这个文件能设置哪些东西我没有了解太多。我这里只写我知道的。
{files.associations: { //这个配置可以指定某些include的库按照哪种语言去解析该文件。特别是一些没有后缀名或后缀名不正常的文件比如*.extension:html就是用html去解析所有后缀为.extension的文件。atomic: cpp, ostream: cpp},mypath:/home/username/xxx/yyy //通过这种设置就可以在其他本文讲到的json文件中通过${config:mypath}来获得mypath的值了。
}