Linux学习笔记:工具gcc/g++和make

1. gcc/g++

在linux中,当我们写了C/C++的代码需要编译的时候,就需要用到linux中C/C++特有的编译器:gcc/g++
因为gcc和g++的用法几乎是相同的,只是编译的代码一个是C语言一个是包含C语言的C++语言罢了.

值得注意的是,在Linux中,C++ 代码文件的后缀名通常有 .cpp .cc 和 .cxx 这三个

1. gcc的使用

当我们写了一个C语言文件test.c时,想要使用gcc进行对代码的编译,可以直接使用语句 gcc test.c

gcc test.c

执行完本句后可以看到当前目录下多了一个a.out 文件
在这里插入图片描述
此时直接执行语句

./a.out

就可以看到代码执行结束的内容了
在这里插入图片描述

2. gcc的编译过程

C语言的的编译一般分为以下几个阶段

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

下面是gcc的编译步骤和操作

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

预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。
实例: gcc –E hello.c –o hello.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
在这里插入图片描述

编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S hello.i –o hello.s
在这里插入图片描述

汇编(生成机器可识别代码)

汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
实例: gcc –c hello.s –o hello.o
在这里插入图片描述

连接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段。
实例: gcc hello.o –o hello
在这里插入图片描述
此时生成的可执行程序 mybin 就是和通过 gcc 直接编译的 a.out 是同样的目标文件了
执行语句 ./mybin
在这里插入图片描述
即可得到与./a.out相同的程序运行结果了

2. Linux项目自动化构建工具make/Makefile

背景

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的
规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂
的功能操作
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编
译,极大的提高了软件开发的效率。
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命
令.
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

依赖关系

比如说有一个文件 hello ,它依赖 hell.o进行gcc -o 编译后才能得到
hello.o , 它依赖 hello.s 进行 gcc -c 编译后才能得到
hello.s , 它依赖 hello.i 进行 gcc - S 编译后才能得到
hello.i , 它依赖 hello.c进行 gcc -E 编译后才能得到

使用方法

首先我们有一个源文件test.c
在这里插入图片描述

在这里插入图片描述
然后用vim创建一个Makefile文件并直接进入编辑

vim Makefile

在这里插入图片描述
此时我想要使test.c直接生成可执行的mybin文件即可输入

mybin:test.c              //  : 左边是目标生成文件, 右边是依赖文件  下一行是执行语句
    @gcc test.c -o mybin       // 前面加@是直接显示执行语句的结果不显示执行语句
.PHONY:clean				//.PHONY是指伪目标,即无视文件内容或属性的更改时间并总在执行的语句
    @rm -f mybin

在这里插入图片描述

写完以上代码后保存并退出
然后执行语句

make

即可得到目标文件
在这里插入图片描述
再使用语句

make clean

即可删除目标文件
在这里插入图片描述

最终版本:多文件下的Makefile写法

我们知道,每一个项目都是有很多个头文件和源文件的,但我们想要一起编译时,Makefile就需要用到更高级的写法
语法:

想要生成的目标文件 : 依赖文件
		gcc -o $@   $^           //注意  $@ 指的是上面语句中 : 左边要生成的目标文件, $^指的是 : 右边所有的依赖文件

当我们有一个头文件一个源文件时,如下;
在这里插入图片描述
此时的Makefile文件的写法如下:

cc = gcc g++	//这里搞定gcc和g++
src = test.c test.h   //这里输入所依赖的所有文件
target = mybin    	//这里输入想要生成的目标文件	
$(target):$(src)
	@cc -o $@ $^
.PHONY:clean
clean:
	@rm -f $(target)

在这里插入图片描述
然后保存退出后执行语句

make

即可生成目标文件
在这里插入图片描述
执行目标文件:
在这里插入图片描述

再执行语句

make clean

即可删除目标文件
在这里插入图片描述
完结~❀❀❀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值