参考课程: 基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili

1、文件编辑器

vim:是所有Unix和Linux系统下标准的文件编辑器

gedit:Linux系统下的纯文本编辑器,可视化后类似于Windows系统中的记事本

touch linux2.txt
sudo gedit linux2.txt

nano:使用起来比vim简单的文本编辑器,可直接编辑,且使用该命令打开文件后,文件的下端有操作提示符,使用起来非常简单

nano linux2.txt

2、编译器和调试器的安装

gcc和g++分别是GNU的c和c++的编译器,gdb是Unix系统的调试工具

sudo apt-get update
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential gdb  # 该命令可同时安装gcc g++及gdb# 查看安装版本
gcc --version
# 输出
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.g++ --version
# 输出
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.gdb --version
# 输出
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 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.

CMake安装可以参考我之前的博客:Ubuntu安装Cmake记录_Cassiel_cx的博客-CSDN博客

或直接安装

sudo apt-get install cmake
cmake --version
# 输出
cmake version 3.23.3CMake suite maintained and supported by Kitware (kitware.com/cmake).

3、编译过程

预处理->编译->汇编->链接 (生成可执行程序)

vscode通过调用gcc和g++编译器来编译c/c++程序

mkdir testcpp
touch test.cpp
sudo gedit test.cpp# test.cpp
# include <iostream>
using namespace std;int main()
{
cout << "Hello World" << endl;
return 0;
}

预处理 (输出 .i 文件)

将所有的#define删除,并且展开所有的宏定义;处理所有的条件预编译指令,比如#if、#ifdef、#elif、#else、#endif等;处理#include预编译指令,将被包含的文件直接插入到预编译指令的位置;删除所有的注释;添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号;保留所有的#pragma编译器指令,因为编译器需要使用它们。

# -E表示编译器只预处理输入文件
g++ -E test.cpp -o test.i

编译 (输出 .s 文件)

扫描->语法分析->语义分析->源代码优化->代码生成->目标代码优化

# -S表示g++为代码产生汇编语言后停止编译
g++ -S test.i -o test.s

汇编 (输出 .o 文件)

将 .s 文件翻译成机器语言指令,把这些指令打包成可重定位目标程序格式

# -c表示g++仅把代码编译为机器语言的目标代码
g++ -c test.s -o test.o

链接 (输出二进制文件)

生成可执行目标文件

g++ test.o -o test

以上四步汇总

g++ test.cpp -o test

在 Linux 系统中,绿色代表可执行文件

4、g++ 重要编译参数

-O[num]:g++对代码进行优化

-O0 表示不做优化
-O1 表示默认优化
-O2 表示除了完成-O1的优化以外,还进行一些额外的调整工作
-O3 表示包括循环展开和其他一些与处理特性相关的优化工作

-l:用于指定程序链接的库,后面紧跟着的就是库名。注意,需在/lib,/usr/lib和/usr/local/lib里面的库才能被-l链接

-L: 指定库文件路径,后面紧跟着库文件所在的目录名

-I:指定头文件搜索目录

-Wall:打印警告信息

-w:关闭警告信息

-std=c++11:设置编译标准

-o:指定输出文件名,若不指定,则默认生成a.out

-D:定义宏,如:-DDEBUG

# include <iostream>
# include <stdio.h>
using namespace std;int main()
{
# ifdef DEBUGprintf("Debug\n");
# endif
}
g++ -DDEBUG test.cpp -o test
./test# 输出
Debug

man:查看指令使用手册,如:man gcc

Linux系统学习笔记二相关推荐

  1. linux系统学习笔记6——debian系统分屏操作(亲测)

    debian系统分屏 刚插上HDMI链接屏幕后,发现两个屏幕是复制的效果 `步骤` xrandr | grep connecteda 1.查看现有的屏幕型号 由上图可以看到,一个是eDP-1 分辨率1 ...

  2. linux中ftp的工作原理,Linux系统学习 十二、VSFTP服务—简介与原理

    1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...

  3. linux系统学习笔记9——CANOpen状态转换

    CANopen CANopen状态转换 CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boo ...

  4. linux系统学习笔记8——LiuxCNC镜像系统安装步骤

    前言 LinuxCNC系统安装 有几个问题可能会遇到需要避免 1 .电脑系统启动模式 boot mode 需要修改成 legancy2.如果是将硬盘分区,那么安装linuxcnc系统镜像的分区最好在前 ...

  5. 最全Linux系统学习笔记--持续更新

    1.shell语法 命令 选项 参数 命令:整条shell命令的主体 选项:会影响会微调整个命令的行为 参数:命令作用的对象 1.自动补全 2.快捷键 ctrl+C:终止前台运行的程序 ctrl+D: ...

  6. Linux系统学习笔记:文件描述符标志

    文件描述符标志的概念 文件描述符标志(目前就只有一个close-on-exec): 它仅仅是一个标志,当进程fork一个子进程的时候,在子进程中调用了exec函数时就用到了这个标志.意义是执行exec ...

  7. linux硬件控制流,Linux系统学习笔记:异常控制流

    程序计数器中指令的地址的过渡称为控制转移,控制转移的序列称为处理器的控制流.最简单的是平滑流.跳转.调用和返回等指令会造成平滑流的突变,来对内部的程序状态中的变化做出反应.系统也需要能够对系统状态的变 ...

  8. linux系统中运行软件,Linux系统学习笔记:运行程序

    为了理解程序运行时计算机做了什么,有必要了解一下计算机的硬件组成.下图给出了计算机的一个硬件组成抽象. 系统的硬件组成 总线是贯穿整个系统的一组电子管道,它携带信息字节并负责在各部件之间传递,一般传递 ...

  9. linux系统学习(二)

    文件,目录 pwd:查看当前目录 Print Working Directory cd,ls(ll),mkdir -p Change Directory List Make Directory du ...

最新文章

  1. 【AI】caffe使用步骤(四):训练和预测
  2. Python 3.6 安装 Shapely
  3. lua学习笔记之日期时间
  4. div中直接绑定富文本值
  5. leetcode 1631. 最小体力消耗路径(并查集)
  6. html自动按键,VBS脚本和HTML DOM自动操作网页
  7. getSystemService
  8. ec11编码器c语言程序,EC11编码器识别程序——有时不准确,请达人指点
  9. data-index在react里怎样表达_对牛弹琴,在英语里该怎样地道表达?
  10. android编程歌词显示,Android 音乐播放器实现歌词显示
  11. xshell 上传文件
  12. 卡迪夫大数据专业排名_大数据分析:英国哪个大学在国内知名度最高
  13. 用户DSN、系统DSN、文件DSN的区别
  14. python之函数习题
  15. 腾讯互娱PHP怎么样,还原最真实的NBA:专访腾讯互娱《最强NBA》
  16. CCF CSP 201809-1 卖菜 题解
  17. 机器学习代码学习(一)-first-dichotomy
  18. 【C语言编程4】输入年份输出全年日历
  19. 压敏电阻器的结构原理及参数 (tvs,气体管,防雷击)
  20. 计算机网络的性能指标:带宽,时延,吞吐量,速率等

热门文章

  1. 单片机中的几种通信方式
  2. c语言 return0作用
  3. [作业]英语作业,无聊记事
  4. 大话设计模式——UML图
  5. 腾讯社招 —— 腾讯游戏后端工程师(一面)
  6. “打开方式”中找不到打开某一类型文件想使用的软件
  7. Java+Swing实现医院管理系统
  8. 电大计算机专业毕业自我鉴定,电大计算机毕业生自我鉴定.doc
  9. 冬天到了,分享两款雪花特效代码
  10. SAP HANA基本数据类型