VS Code 编译及调试环境配置
lauch.json: 用于设置调试、运行时的环境,在右侧选三角形符号,创建launch.json文件,选择选择C++(GDB/LLDB)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
“version”: “0.2.0”,
“configurations”: [
{
“name”: “(gdb) Launch”, // 强制:就一个名字而已,但是是必须要有的
“type”: “cppdbg”, // 强制:调试器的类型,Node debugger for node, php for PHP , go for GO
“request”: “launch”, // 强制:launch/attach
“program”: “
w
o
r
k
s
p
a
c
e
F
o
l
d
e
r
/
{workspaceFolder}/
workspaceFolder/{fileBasenameNoExtension}.out”, // 可执行文件的路径
一般仅修改这里,改变需要调试的可执行文件
“miDebuggerPath”: “/usr/bin/gdb”, // 调试器的位置
“preLaunchTask”:“build”, // 调试前编译任务名称
“args”: [], // 调试参数
“stopAtEntry”: false,
“cwd”: “KaTeX parse error: Expected 'EOF', got '}' at position 248: …res": true } ] }̲ ] } **tasks.js…{workspaceFolder}/
f
i
l
e
B
a
s
e
n
a
m
e
"
,
/
/
被编译文件,通常为
.
c
p
p
/
.
c
/
.
c
c
文件等
"
−
I
"
,
/
/
i
n
c
l
u
d
e
p
a
t
h
指令
"
/
u
s
r
/
i
n
c
l
u
d
e
"
,
"
−
L
"
,
/
/
l
i
b
路径
"
/
u
s
r
/
l
i
b
/
x
8
6
6
4
−
l
i
n
u
x
−
g
n
u
"
,
"
−
l
"
,
/
/
链接库文件
1
"
o
p
e
n
c
v
c
o
r
e
"
,
"
−
l
"
,
/
/
链接库文件
2
"
o
p
e
n
c
v
h
i
g
h
g
u
i
"
,
"
−
o
"
,
/
/
生成指定名称的可执行文件
"
{fileBasename}", // 被编译文件,通常为.cpp/.c/.cc文件等 "-I", // include path指令 "/usr/include", "-L", // lib路径 "/usr/lib/x86_64-linux-gnu", "-l", // 链接库文件1 "opencv_core", "-l", // 链接库文件2 "opencv_highgui", "-o", // 生成指定名称的可执行文件 "
fileBasename",//被编译文件,通常为.cpp/.c/.cc文件等"−I",//includepath指令"/usr/include","−L",//lib路径"/usr/lib/x8664−linux−gnu","−l",//链接库文件1"opencvcore","−l",//链接库文件2"opencvhighgui","−o",//生成指定名称的可执行文件"{workspaceFolder}/${fileBasenameNoExtension}.out”
/* -g hello.cpp -I/usr/include -L/usr/lib/x86_64-linux-gnu -lopencv_core -o hello.out */
],
“group”: {
“kind”: “build”,
“isDefault”: true
}
},
{
“label”: “cmakebuild”,
“type”: “shell”,
“command”: “cd build && cmake …/ && make”, // shell 编译命令,做并运算,即前一命令执行失败,则后一命令也不执行
“args”: []
}
]
}
c_cpp_properties.json:ctrl shift p —>configurations.json 基本不用设置,注意compilerPath路径是否是你想要的
{
“configurations”: [
{
“name”: “Linux”, //配置名称,默认为系统名,可以自行更改
“includePath”: [ //(常用)运行项目包含.h头文件的目录,
“${workspaceFolder}/**”//此处会匹配工作文件下的所有文件
], //添加"compilerPath"后,系统include路径可不写明
“defines”: [], //(常用)定义一些需要的变量,等价于在编译时写"-D变量"
“compilerPath”: “/usr/bin/gcc”, //编译器的路径
“cStandard”: “gnu17”, //C标准的版本
“cppStandard”: “gnu++14”, //C++标准的版本
“intelliSenseMode”: “gcc-x64” //IntelliSense的一些配置,默认即可
}
],
“version”: 4
}
自动创建launch.json和tasks.json步骤:
1.C文件创建完成后,点击左侧三角形或者选择运行中的添加配置,选择选择第一项"C++ (GDB/LLDB)"(Windows那个是给MSVC编译器用的,MingGW需要使用GDB),
2.接下来选择默认的"gcc.exe - 生成和调试活动文件"(或"g++.exe - 生成和调试活动文件",具体取决于之前编译器路径的配置)
3.接下来会自动创建launch.json文件,进入调试模式
4.代码会被自动编译,并自动以调试模式执行一遍生成的程序。如果代码没什么问题,且未设置任何断点或等待外部输入的代码,
这个黄框一般只会闪现一下,程序一结束就会回归正常。
但注意如果代码中存在等待键盘输入的代码(比如scanf()这类),调试界面就会卡住而不会自动退出(因为你要输入的东西还没输呢)。
由于程序是在“终端”里执行的,要输入内容的话需要先切换到“终端”
预定义变量的意义解释
${workspaceFolder} :表示当前workspace文件夹路径,如C:\Users\admin\Desktop\test
${workspaceRootFolderName}:表示workspace的文件夹名,如test
${file}:文件自身的绝对路径,如C:\Users\admin\Desktop\test.vscode\launch.json
${relativeFile}:文件在workspace中的路径,如.vscode\launch.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,如hello/launch
${fileBasename}:当前文件的文件名,如 hello.cpp/launch.json等
${fileDirname}:文件所在的文件夹路径,也即C:\Users\admin\Desktop\test.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量
.vscode下的配置文件:
1、c_cpp_properties.json一般用于添加包含路径,方便程序员编写代码时直接引用外部文件。该文件对编写代码有用,引用文件时不会提示错误,但对运行代码用处不大。
2、launch.json用于调试运行代码。tasks.json用于编译代码。
3、settings.json是runcode的配置文件,用于直接点击运行代码。
使用VSCode时,最好确保VSCode与.c的工作目录一致,即将.c放在根目录下,但是当工程大时,应将头文件与源文件分开在不同的文件夹下进行管理,有如下两种方式引入头文件:
1.在头文件中#include “C:/Users/Administrator/Desktop/TEST/include/test.h”,加入绝对路径,才可以找到头文件
注意:在windows系统下,路径的符号时“/” 或者 “\”,而在linux下只能是“/”
2.若工作目录不一致,引用外部文件时最好使用绝对地址,运行时需注意在settings.json或tasks.json添加.h所在文件夹路径。只
在c_cpp_properties.json添加.h所在文件夹路径,最多是在写代码不提示包含路径错误而已,对运行代码时引用外部文件不起作用。
注意:我在测试时,只修改c_cpp_properties.json(在include path中加入头文件路径),点击run code 和调试运行 均失败,修改了tasks.json(在args中,加入
“-I”,
“C:/Users/Administrator/Desktop/TEST/include”,
,即配置编译依赖路径)
后,点击run code失败,调试运行成功,而且生成了可执行文件test.exe,在终端输入“./test.exe”运行成功
,确定是setting.json配置错误,但未找到修改方法。也可以
在终端输入g++ -c test.cpp -I C:\Users\Administrator\Desktop\TEST\include,生成test.o文件,
然后输入g++ test.o -o test,生成可执行文件test.exe,
最后在终端输入“./test.exe”运行成功。
编译原理:分为编译和链接,编译:将源文件经编译器转换成汇编代码.s,汇编代码经汇编器转换成目标代码.o,然后其他目标文件,生成的.o文件,其他库文件经过链接最终成功可执行文件.exe
- 预编译
将.c 文件转化成 .i文件
使用的gcc命令是:gcc –E
对应于预处理命令cpp
- 编译
将.c/.h文件转换成.s文件
使用的gcc命令是:gcc –S
对应于编译命令 cc –S
- 汇编
将.s 文件转化成 .o文件
使用的gcc 命令是:gcc –c
对应于汇编命令是 as
- 链接
将.o文件转化成可执行程序
使用的gcc 命令是: gcc
对应于链接命令是 ld
总结起来编译过程就上面的四个过程:预编译处理(.c) --> 编译、优化程序(.s、.asm)--> 汇编程序(.obj、.o、.a、.ko) --> 链接程序(.exe、.elf、.axf等)