Linux编辑器gcc/g++的使用以及Makefile的用法

news/2024/10/19 7:34:37/

gcc如何完成

格式 gcc [选项] 要编译的文件 [选项] [目标文件]

gcc对code.c编译形成可执行文件mybin,十分推荐直接这样写,下面会有拆分写法(不推荐)

gcc与我们使用过的编辑器无二,都需要经过

1. 预处理(进行宏替换)
2. 编译(生成汇编)
3. 汇编(生成机器可识别代码)
4. 连接(生成可执行文件或库文件)

这几个阶段,简单说一下各个阶段的作用

预处理(进行宏替换)
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。

选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

编译(生成汇编)
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。

用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的“.s”文件转成目标文件。

读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了

连接(生成可执行文件或库文件)
在成功编译之后,就进入了链接阶段。

Makefile(自动化构建代码)

可以增加效率

基本使用

首先需要手动创建一个Makefile的文本文件

使用vim 对其进行编译

这里mybin依赖于code.c

因为gcc这条指令是Makefile里第一条指令,所以使用时只需要make就可执行

可以看到打出make直接就执行了第一条指令

我们继续定义第二条指令

可以看到我们执行第二条指令需要在make 后加上clean

同时我们发现第二条指令上面有一个红色的.PHONY(最后有详细讲解)

如果要用到.PHONY我们先看一个示例:

连续两次make,第二次make失败了

我们需要知道:

make 与 Make 不会对老文件重新编译,而新文件则重新编译,通过对比更改时间来判断的。

stat可以查看文件的ACM三个时间

变量替换和隐藏回显

Makefile是支持变量替换的

这里和我们c语言里面的宏替换很像,以图为例后续使用就可以用cc来代替g++

可以写成这样

还有一个便捷的变量替换:

$^代表依赖关系冒号右侧所有内容

$@代表依赖关系左侧形成的目标文件

同时还看到我还使用了@,它的作用是什么?

这里看到,明显我不想让打印的命令打印出来

加了@之后就和我预想的效果是一样的了:

.PHONY

接下来详细介绍.PHONY:

.PHONY 是 Makefile 中的一个特殊目标,用于声明一个伪目标(phony target)。伪目标是指在文件系统中并不存在对应的文件名,而是由 Makefile 中的规则和命令来执行的目标。依赖方法总是会被执行,不会被任何情况拦截。

简单来说,加了.PHONY后gcc就不看时间,直接执行

给第一条指令增加了


http://www.ppmy.cn/news/1427582.html

相关文章

【Day 3】Ajax + Vue 项目、路由 + Nginx

1 Ajax Asynchronous JavaScript And XML 异步的 JavaScript 和 XML 作用: 数据交换 通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据 异步交互 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术&#xf…

C++三大特性之一:继承

文章目录 前言一、继承方式二、继承类型继承中构造和析构的顺序继承中的内存分配多继承语法(非重点)继承中同名静态成员的处理继承一般在哪里用到进阶:菱形继承和虚拟继承 总结 前言 C三大特性:继承、多态和封装。继承是面向对象编程的一个核心概念&…

记录交叉编译环境配置--海思开发板的 嵌入式nginx和 php的移植

嵌入式 lnmp搭建的记录 一些交叉编译的配置环境思路分享:P:php编译PHP可能遇到的问题configure阶段:Makefile-make阶段:Makefile-make install阶段: N:Nginx 文章比较水,并没有没解决什么实际问…

移动端双验证码登录实现

说明:本文介绍如何用图形验证码短信验证码实现移动端登录思路; 分析 通过手机号图形验证码手机验证码实现登录的时序图如下: 说明: (1)用户进入登录界面,出现图形验证码,可点击图形…

Since Maven 3.8.1 http repositories are blocked.

编译maven 项目时候报错提示下面信息: Since Maven 3.8.1 http repositories are blocked.Possible solutions: - Check that Maven settings.xml does not contain http repositories - Check that Maven pom files do not contain http repository http://XXXXXX:…

信号分解 | VMD(变分模态分解)-Matlab

分解效果 VMD(变分模态分解) 变分模态分解(Variational Mode Decomposition,VMD)是一种信号分解方法,用于将非平稳信号分解为一组模态函数。VMD是一种自适应的数据驱动方法,可以有效地处理具有非线性和非平稳特性的信号。 VMD的基本思想是通过迭代优化过程,将原始信号分…

一起Talk Android吧(第五百五十七回:如何获取文件读写权限)

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 内容总结各位看官们大家好,上一回中分享了一个Retrofit使用错误的案例,本章回中将介绍 如何获取文件读写权限。闲话休提,言归正转,让我们一起Talk Android吧! 1. 概念介绍 我们在本章回中说的文本读写权限是指读写手机中的…

Android开发——Fragment

Demo fragment_blank.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…