1. 安装VSCODE

见VSCode官方链接 https://code.visualstudio.com/docs/setup/linux#_rhel-fedora-and-centos-based-distributions

 先下载yum源

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'

安装VSCODE

yum check-update    #更新yum源
yum -y install code #安装VSCode

2. 安装GCC

yum -y install gcc gcc-g++ 

3. C/C++编译过程

假设我们有如下代码hello.cc需要进行编译

#include <iostream>
using namespace std; int main() {
cout << "Hello, VS Code!" << endl;
return ;
}

GCC编译器按照编译->链接两步来生成应用程序。其中编译生成的结果是.o文件,链接会生成可执行程序或静态/动态库文件,在linux中为.a, .sa, .la为后缀的文件,可执行文件在linux中可以没有后缀,如果没有特别指定,默认为a.out.

3.1 编译hello.cc

g++ -c hello.cc

输出结果是一个hello.o文件,这是编译过程的生成的中间文件。-c 表示只编译,不链接

3.2 链接hello.o生成hello.out

g++ -o hello.out hello.o

其中-o 表示生成的目标文件的名称,如果不指定,默认的文件名为a.out,生成的,目标文件可以没有后缀,也就是说以下命令也是正确的

g++ -o hello hello.o

当然,如果第1、2步是可以合并执行,直接执行命令

g++ -o hello.out hello.cpp

3.3 运行hello.out

 ./hello.out

输出如下:

Hello, VS Code!

4. 构建项目

4.1 安装make

Linux中,构建项目要用到make,先确认make已经安装,在控制台输入如下指令:

make -v

如果已经安装make,则会输出make的版本信息

GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

否则,就没有安装make,要安装make,使用以下命令:

yum -y install cmake

4.2 准备构建脚本

在当前项目根目录下,输入

vi makefile

在makefile中输入如下内容:

 hello:hello.o
g++ hello.o -o hello #按照makefile 语法,前面的不是空格,而是tab键,否则构建会失败
hello.o:hello.cc
g++ -c -g -o hello.o hello.cc #按照makefile 语法,前面的不是空格,而是tab键,否则构建会失败
clean:
rm -f *.o #按照makefile 语法,前面的不是空格,而是tab键,否则构建会失败

输入:wq保存退出.

解释一下makefile的语法,

target ... : prerequisites ...
  command #注意前面是tab,而不是空格

target是一个目标文件,可以是Object File,也可以是执行文件,还可以是一个标签;

prerequisites是要生成那个target所需要的文件或是目标;

command是make需要执行的命令(任意的Shell命令)。

说白了就是target这一个或多个目标,依赖于prerequisites列表中的文件,其执行规则定义在command里。如果prerequisites列表中文件比target要新,就会执行command,否则就跳过。这就是整个make过程的基本原理。

注意第3行中的 -g参数,在生成hello.o文件过程中,g++命令中 -g 表示生成的文件是可调试的,如果没有-g,调试时无法命中断点

在默认情况下,只需输入make,则发生了以下行为:

a. make在当前目录下找名为makefile或Makefile的文件;

b. 如果找到,它会找文件中的第一个target,如上述文件中的build,并作为终极目标文件;

c. 如果第一个target的文件不存在,或其依赖的.o 文件修改时间要比target这个文件新,则会执行紧接着的command来生成这个target文件;

d. 如果第一个target所依赖的.o文件不存在,则会在makefile文件中找target为.o的依赖,如果找到则执行command,.o的依赖必是.h或.cpp,于是make可以生成 .o 文件了

e. 回溯到b步执行最终目标

测试一下makefile的执行情况:

[root@lenmomDesktop hello]# ls -l      #查看执行前的文件列表,只有两个文件 hello.cc makefile 
total 8
-rw-rw-r-- 1 lenmom lenmom 174 Jun 17 17:05 hello.cc    
-rw-rw-r-- 1 lenmom lenmom 115 Jun 17 17:43 makefile
[root@lenmomDesktop hello]# make        #执行make
g++ -c -g -o hello.o hello.cc
g++ hello.o -o hello
[root@lenmomDesktop hello]# ls -l            #查看make之后的文件列表,发现多了hello和hello.o两个文件
total 56
-rwxr-xr-x 1 root root 21128 Jun 17 20:27 hello
-rw-rw-r-- 1 lenmom lenmom 174 Jun 17 17:05 hello.cc
-rw-r--r-- 1 root root 23896 Jun 17 20:27 hello.o
-rw-rw-r-- 1 lenmom lenmom 115 Jun 17 17:43 makefile
[root@lenmomDesktop hello]# ./hello          #执行hello文件
hello VS Code                                #hello的执行输出
[root@lenmomDesktop hello]# make clean       #执行make clean清除中间文件
rm -f *.o
[root@lenmomDesktop hello]# ls -l            #查看执行clean之后的文件列表,发现hello.o已经没有了
total 32
-rwxr-xr-x 1 root root 21128 Jun 17 20:27 hello
-rw-rw-r-- 1 lenmom lenmom 174 Jun 17 17:05 hello.cc
-rw-rw-r-- 1 lenmom lenmom 115 Jun 17 17:43 makefile

5. vscode调试

5.1 安装gdb

yum -y install gdb

5.2 创建launch.json

mkdir ./.vscode
vi ./.vscode/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": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/hello",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}

其中第12行,表示启动的程序的名称,本例中build之后的输出文件为hello。

第19行,build表示在启动调试之前,要做的任务,显然在调试之前应该编译工程,也就是要make 执行以下makefile,产生最新的项目输出。

所以我们还要创建一个构建任务的Json文件,其中任务名称为build,这个任务被launch引用,也就是第19行中的build的含义。

vi  ./.vscode/tasks.json

输入以下内容:

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"reveal": "always",
"tasks": [
{
"args": ["-f", "makefile"],
"label":"build",
"type": "shell",
"command": "make"
}
]
}

这个task的意思是,在shell命令行中执行make  -f   makefile

接下来在vscode中选择C++ Launch【launch.json文件中的name】,点击调试按钮即可进行项目调试了。

在CentOS 7中使用VS Code编译调试C++项目的更多相关文章

  1. 【转载】在Linux中使用VS Code编译调试C++项目

    原文:在Linux中使用VS Code编译调试C++项目 最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS ...

  2. 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  3. 在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  4. 解决VS Code编译调试中文输出乱码

    最近尝试用VS Code配置了C和C++的编译调试环境,结果遇到了中文输出乱码问题,查阅网上竟然还没有相关问题,有怀疑是mingw中文支持问题,但最后证明是VS Code编码问题. 解决方案: 文件- ...

  5. [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件

    在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么 ...

  6. CentOS 7中Nginx1.9.5编译安装教程systemctl启动

    先安装gcc 等 yum -y install gcc gcc-c++ wget 复制代码 .然后装一些库 yum -y install gcc wget automake autoconf libt ...

  7. 在MVC中如何使用vs2013编译调试razor cshtml

    打开mvc项目的csproj文件: <MvcBuildViews>false</MvcBuildViews> 改为 <MvcBuildViews>true</ ...

  8. [Cordova] 无法编译Visual Studio项目里Plugin副本的Native Code

    [Cordova] 无法编译Visual Studio项目里Plugin副本的Native Code 问题情景 开发Cordova Plugin的时候,开发的流程应该是: 建立Cordova Plug ...

  9. Linux下C++/C的编译调试

    这几天因为任务的原因我需要在ubuntu下编写程序.因此恶补了许多linux程序编写的知识.我分以下几个方面总结我所学的知识. gcc,g++,make命令的使用 gdb 调试 VScode的使用 c ...

随机推荐

  1. vue.js 源代码学习笔记 ----- 工具方法 lang

    /* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...

  2. zookeeper的c API 单线程与多线程问题 cli_st和cli_mt

    同样的程序,在centos和ubuntu上都没有问题,在solaris上问题却多多,据说是solaris管理更加严格. zookeeper_init方法,在传入一个错误的host也能初始化出一个非空的 ...

  3. for循环打印等腰三角形、直角三角形、菱形

    一.等腰三角形 package s1; import java.util.Scanner; public class C31 { public static void main(String[] ar ...

  4. (三) ffmpeg filter学习-编写自己的filter

    目录 目录 什么是ffmpeg filter 如何使用ffmpeg filter 1 将输入的1920x1080缩小到960x540输出 2 为视频添加logo 3 去掉视频的logo 自己写一个过滤 ...

  5. python3精简笔记(二)——函数

    函数 下面的地址可以查看函数: https://docs.python.org/3/library/functions.html 也可以在交互式命令行通过help()查看函数的帮助信息. 如: > ...

  6. 依存可视化︱Dependency Viewer——南京大学自然语言处理研究组

    来源网页:http://nlp.nju.edu.cn/tanggc/tools/DependencyViewer.html 视频演示网页:http://nlp.nju.edu.cn/tanggc/to ...

  7. 创建你的第一个Flutter应用程序

    前言 Flutter,Google推出的跨平台开发框架.就在前几天,Flutter的首个发布预览版(Release Preview 1)正式发布! 即将迎来Flutter 正式版(1.0).本篇将带你 ...

  8. IOS开发 CocoaPods 使用 pod Install 出现 Updating local specs repositories

    pod install 换成pod install --verbose --no-repo-update这个命令,前面的命令被墙了

  9. webpack 实现自动刷新,复制文件,实现开发环境和发布环境

    webpack例子:https://github.com/Aquarius1993/webpackDemo 安装: webpack , webpack-dev-server 1.如何在使用webpac ...

  10. 上传IOS项目和版本更新流程图

    上传IOS项目和版本更新流程图 必备IDP证书和distribution证书(第一个证书是真机部署测试时用到的,后者证书是发布时需要用到的,缺一不可). 我就说说接下来应该做的流程.在你保证拥有以上两 ...