【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

简介: 【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

一.gcc的使用

在学习C语言时,我们了解了预处理阶段要做的事:->预处理

这其中会经历两个阶段:编译和链接

而编译又分为三个阶段:预编译,编译,汇编

通过不同的选项,可以让gcc停在以上相应的阶段。

1. //-o 后面紧跟文件名,当然你也可以命名成其它名字
2.     gcc -E test.c -o test.i;   //告诉gcc,从现在开始进行程序的翻译,做完预处理工作后就停下来
3. 
4.  gcc -S test.i -o test.s   //从现在开始程序的翻译,编译工作做完后停下
5. 
6.  gcc -c test.c -o test.o   //做完汇编工作后停下
7.                         //.o 文件可重定位目标二进制文件,简称目标文件,
8.                         //不可以独立执行,需要经过链接才能执行
9. 
10.     gcc test.o -o test.exe  //连接,生成可执行文件或库文件
11. 
12. 
13. //如果不想写这么麻烦,可以使用 -o 直接生成可执行文件
14.    gcc test.c -o test.exe

这里有一个记忆的小窍门,我们电脑左上角的Esc键,顺序刚好和上面的顺序一致,所以不记得的时候,看一眼电脑左上角,不过要记住大小写。

常用选项:

-g  :gcc默认是release版本,是不支持调试的,-g可以生成调试信息,但相应的文件的体积          会变大;

-static: 静态连接,文件体积也会变大

运行生成的可执行文件: ./test.exe

 

g++和gcc的使用差不多,就不赘述了。

 


二.make/makefile

make 是指令,makefile是文件,两个是配套使用的。

makefile文件格式:

1. //依赖关系(test是可执行文件,依赖源文件test.c生成,注意这个test.c文件必须在当前目录下 
2. //能找到
3. test:test.c    
4.     gcc test.c -o test;   //依赖方法,就是test.c 到可执行文件的生成方式
5. clean:             //clean无依赖关系
6.     rm -rf test;

 

所以我们现在要使用gcc编译生成可执行文件时,只需一次性把代码写到makefile文件里,在使用make命令就可以一件生成了,省去了重复写的麻烦,并且这个make是递归式生成的,所以写依赖关系和依赖方法时,不用担心顺序的问题。

不能重复make?

可是我们发现一次make后,第二次就不能make了

这是因为make有这样一个规则:

对于可执行文件和源文件的最后一次修改时间

    若可执行文件新于源文件,则不需要再次编译;

    若可执行文件老于源文件,则重新编译。

键入 stat 可查看文件的各个时间:

 

项目清理

clean是负责项目清理的,我们希望它总是被执行,所以可以用.PHONY 修饰

.PHONY 是伪目标,伪目标的特性是总是被执行

 

常用符号

$@ :代替依赖关系:的左边

$^ :代替依赖关系:的右边(不管右边有几个文件,都可以用一个$^代替)

@:在依赖方法语句的前面加上@,可以在使用make时,不回显依赖方法的语句

 


🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼

相关实践学习
CentOS 8迁移Anolis OS 8
Anolis OS 8在做出差异性开发同时,在生态上和依赖管理上保持跟CentOS 8.x兼容,本文为您介绍如何通过AOMS迁移工具实现CentOS 8.x到Anolis OS 8的迁移。
目录
相关文章
|
25天前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
52 20
[Linux工具] Makefile
|
8天前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
37 20
|
7天前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
39 16
|
4月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
50 0
Linux c/c++之makefile的基础使用
|
8月前
|
Linux 开发工具 数据安全/隐私保护
Linux基础——Linux开发工具(下)_make/makefile
Linux基础——Linux开发工具(下)_make/makefile
64 1
|
7月前
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
49 0
|
7月前
|
Java Linux 编译器
编写和使用Linux Makefile
编写和使用Linux Makefile
|
8月前
|
Linux
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现
|
8月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
137 0
|
8月前
|
NoSQL Linux 编译器
Linux基础——Linux开发工具(中)_gcc/g++
Linux基础——Linux开发工具(中)_gcc/g++
50 0