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小时内删除。