VSCode+GCC+Makefile+GitHub 项⽬管理---基础篇
⼀、简介
Visual Studio Code (简称 VS Code / VSC) 是⼀款免费开源的现代化轻量级代码编辑器,⽀持⼏乎所有主流的开发语⾔的语法⾼亮、智能代码补全、⾃定义热键、括号匹配、代码⽚段、代码对⽐ Diff、GIT 等特性,⽀持插件扩展,并针对⽹页开发和云端做了优化。软件跨平台⽀持 Win、Mac 以及 Linux。教程见链接:。
⼆、环境配置
GCC 编译器是 Linux 下默认的 C/C++ 编译器,⼤部分 Linux 发⾏版中都是默认安装的,通常以 Linux 命令的形式在终端(Shell)中使⽤。GCC编译命令参数详见博客:。
Windows下如果也想使⽤GCC编译器(开源软件最常⽤的编译器之⼀),推荐安装MinGW,安装教程见博客:。
三、VSCode 编译调试C++程序
VSCode配置C/C++环境并编译运⾏调试的过程在⽹上到⼀篇不错的博客:,这⾥不再重复详述,只做⼀点补充。
下⾯分别贴出launch.json与tasks.json的配置项供参考:// launch.json:{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: go.microsoft/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "C++(gdb) Launch", //DEBUG 中出现的名字 "preLaunchTask": "cppdbg", //在launch 之前运⾏的任务名,要跟tasks.json 中的"label"⼤⼩写⼀致 "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", //需要运⾏的是当前打开⽂件的⽬录中,名字和当前⽂件相同,但扩展名为exe 的程序 "args": [], "stopAtEntry": false , //选为true 则会在打开控制台后停滞,暂时不执⾏程序 "cwd": "${workspaceFolder}", //当前⼯作路径:当前⽂件所在的⼯作空间 "environment": [], "externalConsole": true , //是否使⽤外部控制台 "MIMode": "gdb", "miDebuggerPath": "C:/MinGW/", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
VSCode的DEBUG功能也挺⽅便,可以追踪监视变量及地址的变化、堆栈调⽤、多种断点分析等功能,⽐如下⾯给出⼀段案例代码,并插⼊⼀个条件断点,调试界⾯见下图⽰:// tasks.json:{ // See go.microsoft/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "cppdbg", //launch 中"preLaunchTask"调⽤的任务名,需要⼤⼩写保持⼀致 "type": "shell", //任务执⾏的是shell 命令,也可以是process 程序 "command": "g++", //执⾏的命令是g++ "args": [ "-Wall", //⽣成所有警告信息 "-std=c++11", //使⽤c++11标准编译 "-g", //⽣成调试信息 "${file}", //当前⽂件名 "-o", //⽣成指定的输出⽂件 "${fileDirname}\\${
fileBasenameNoExtension}.exe", ], "group": { "kind": "build", //任务分组名,可以通过在Command Palette(F1) 输⼊run build task 来运⾏ "isDefault": true }, "problemMatcher": [ "$gcc", // 使⽤gcc 捕获错误 ], } ]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29// test.cpp:#include <cstdio>#include <iostream>using namespace std ;int main (int argc , char *argv []){ int i ; printf ("Hello,World.\n"); for (i = 0; i < 10; i ++){ cout << i << " : " << &i << endl ; //添加⼀个i ==5 的条件断点供调试 } getchar (); return 0;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
四、代码与同步
之前我写过⼀篇的博⽂,养成社会化编程的习惯让⾃⼰嵌⼊到全球软件⼯程师的协作⽹络中,提⾼⾃⼰的开发效率和能⼒名⽚。VSCode原⽣⽀持Git倒是提供了不少便利,从下图Source Control(Ctrl + Shift + G)可以看到VSC原⽣⽀持的命令主要是保持本地与远程代码同步的,新建或切换⼯作分⽀、向⼯作分⽀增加新⽂件等操作还是需要借助Git完成,命令参考如下:
五、管理项⽬
在软件开发中,make通常被视为⼀种软件构建⼯具。该⼯具主要经由读取⼀种名为“makefile”或“Makefile”的⽂件来实现软件的⾃动化建构。它会通过⼀种被称之为“target”概念来检查相关⽂件之间的依赖关系,这种依赖关系的检查系统⾮常简单,主要通过对⽐⽂件的修改时间来实现。在⼤多数情况下,我们主要⽤它来编译源代码,⽣成结果代码,然后把结果代码链接起来⽣成可执⾏⽂件或者库⽂件。GCC⾃带⼯具,在MinGW中名字变成了,如果想⽅便的话可以复制⼀个改名为,makefile的教程可参考博客:
下⾯给出通过Makefile管理C/C++项⽬的launch.json与tasks.json配置项如下:λ git init #初始化仓库Initialized empty Git repository in D:/VSCode/.git/λ git checkout -b master #新建master ⼯作分⽀并切换到该分⽀Switched to a new branch 'master'#将已新建好的远程仓库添加为本地仓库的远程仓
库,并将该远程仓库在本地的标识符设为test λ git remote add test git@github:StreamAI/VSCode.git λ git add --all #将默认的master ⼯作分⽀内的⽂件添加到index 暂存区λ git status #查看仓库的状态On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage ) new file: .vscode/launch.json new file: .vscode/tasks.json new file: CPP/test.cpp new file: new file: README.md λ git commit -m "Add test c++ script" #将当前暂存区内的⽂件实际保存到本地仓库的历史记录中[master (root-commit ) c88d983] Add test c++ script 5 files changed, 75 insertions (+) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 CPP/test.cpp create mode 100644 create mode 100644 README.md λ git push test master #将当前分⽀下本地仓库的内容推送给远程仓库的master 分⽀Enumerating objects: 9, done.Counting objects: 100% (9/9), done.Delta compression using up to 4 threads Compressing objects: 100% (8/8), done.Writing objects: 100% (9/9), 19.58 KiB | 2.80 MiB/s, done.Total 9 (delta 0), reused 0 (delta 0)To github:StreamAI/VSCode.git * [new branch ] master -> master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
makefile phony22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// launch.json:{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: go.microsoft/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Makefile Launch(GDB)", //DEBUG 中出现的名字 "preLaunchTask": "build", //在launch 之前运⾏的任务名,要跟tasks.json 中的"label"⼤⼩写⼀致 "type": "cppdbg", "request": "launch", "program": "${fileDirname}/", //需要运⾏的是当前打开⽂件的⽬录中,名字和当前⽂件相同,但扩展名
为exe 的程序 "args": [], "stopAtEntry": false , //选为true 则会在打开控制台后停滞,暂时不执⾏程序 "cwd": "${workspaceFolder}", //当前⼯作路径:当前⽂件所在的⼯作空间 "environment": [], "externalConsole": true , //是否使⽤外部控制台 "MIMode": "gdb", "miDebuggerPath": "C:\\MinGW\\bin\\", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ]}12345678910111213141516171819202122232425262728293031// tasks.json:{ // See go.microsoft/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "build", //launch 中"preLaunchTask"调⽤的任务名,需要⼤⼩写保持⼀致 "type": "shell", //任务执⾏的是shell 命令,也可以是process 程序 "command": "mingw32-make", //执⾏的命令是mingw32-make "args": [ "-C", //跳转到指定⽬录去读取⽬标⽬录下的Makefile ⽂件 "./Makefile", //要跳转的⽬标⽬录 "clean", //要执⾏的任务 "default", //要执⾏的下⼀个任务 ], "group": { "kind": "build", //任务分组名,可以通过在Command Palette(F1) 输⼊run build task 来运⾏ "isDefault": true }, "problemMatcher": [ "$gcc", // 使⽤gcc 捕获错误 ], } ]}123456789101112131415161718192021222324252627
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论