VScode的C/C++环境配置
安装VScode
首先下载安装VScode,开源软件首推官网下载https://code.visualstudio.com/,Linux中使用的话选择下载.deb文件,之后执行(根据文件名称自行修改指令)
sudo dpkg -i code_1.42.1-1581432938_amd64.deb
安装C/C++插件
打开VScode,Ctrl+Shift+P,输入指令Preferences:Language Extensions安装C/C++模块
保证已安装GCC编译器和GDB工具
VScode只是一个文档的编辑器,本身不具备编译和调试功能,编译和调试需要调用外部程序进行,比如GCC编译器和GDB工具。GCC和GDB在Linux系统中一般会默认安装,可以通过如下指令查看版本信息确认是否安装
gcc -v
gdb -v
如果都没有安装,可以通过如下指令安装GCC和GDB
GCC安装
GCC官方安装教程(https://gcc.gnu.org/install/),从源代码开始生成安装。
Ubuntu中也可以使用如下指令安装:
- sudo apt install gcc
- sudo apt install build-essential
GDB安装
- 下载GDB源码,官网(http://ftp.gnu.org/gnu/gdb/)自行选择版本
- 下载后用tar -zxvf命令解压文件
- 进入解压后的文件夹,使用命令./configure生成makefile文件
- 执行make指令(耗时较久,耐心等待)
- sudo make install
准备源码以及相关配置文件launch.json和task.json
launch.json和task.json可以由VScode默认生成再自己调整细节,也可以自己通过如下命令直接编写:
mkdir .vscode
cd .vscode
vim launch.json
vim task.json
笔者学习过程自己随手写了如下一个简单的hello.cpp文件:
#include
using namespace std;
void xx(int& a){
++a;
}
int main(){
int x=0;
while(x<3){
xx(x);
}
if(x==3)
cout<<"Hello World!"<
该程序只是简单的将x自增到3然后输出“Hello World!”;
launch.json和task.json则使用默认生成的文件再进行微调:
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": "execute hello world",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build hello world", //一定要和task.json中某一tasks的label标签内容一致
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
task.json文件内容如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "make",
"args":["-s"]
}
]
}
task.json中调用了make命令需要makefile文件,内容后续再说明。
VScode的简单调试说明
F5开始调试,Ctrl+F5执行不调试,调试中F5继续执行,F10执行一步,F11步入函数,Shift+F11跳出函数,Ctrl+Shift+F5重新开始,Shift+F5结束调试。
VScode调试界面说明:
输出结果:
Makefile文件
Makefile概述
Makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为Makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。
Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,例如Linux下的GNU make。
Makefile简单实例
笔者的Makefile文件内容如下:
hello: hello.o
g++ hello.o -o hello
hello.o:hello.cpp
g++ -g -c hello.cpp
.PHONY:clean
clean:
rm -f hello hello.o
Makefile文件说明
targets : prerequisites
command
targets是要生成的目标文件,prerequistites是依赖文件,command是生成该文件指定的需要执行的命令。makefile中的第一个targets作为默认执行目标。一般而言,会以Unix标准Shell(/bin/sh)来执行命令。
其中的依赖关系可以由gcc自动生成:
- gcc中-M参数会列出所有的依赖关系
- gcc中-MM参数会列出所有不是标准库的依赖关系.
伪目标
.PHONY:clean表明clean是一个伪目标,可以理解为一个锚点,在执行make命令时可以通过"make clean"来调用目标clean的指令。(Ps:clean一般会写在最后)
make命令部分参数介绍
1. -n参数按顺序输出所有需要执行的命令但不执行;
2. -s参数会不输出任何说明的执行所有命令;
3. -w参数会在输出原有命令的基础之上输出访问推出文件夹的信息.
Ps:以上内容只是笔者在此次搭建过程中涉及到的内容说明,Makefile还有更多更深的内容需要慢慢了解和学习,作为一个方便程序员的工具,它具有非常强大的生命力。与此同时也存在很多自动生成Makefile文件的工具,例如Cmake,autotools等,在使用中也会极大方便我们。
自己手动编写Makefile虽然耗时更久,但是对于整个过程会有一个更好的把握,在遇到问题需要debug的时候可以更加得心应手;而合理运用自动化工具,可以提供更高的效率。鱼和熊掌不可兼得,在实际应用中还需要根据情况自行判定。