Makefile初体验

1.1 make是什么

当一个项目中要编译的文件很多时,手工使用编译器一个个进行编译,很明显不具有可操作性,此时必须借助某些软件,协助我们有序地、正确地自动编译整个工程的所有该编译的文件。这样的软件被称为 工程管理器make 就是一款工程管理器软件。

1.2 Makefile是什么

make 正常工作时,会读取一个称为 Makefile 的配置文件,该配置文件可以为 make 指明细致的工作规则,比如所使用的工具链、要编译的目标文件名称、要递归编译的子文件夹路径等等。

对工程管理器软件的学习,主要就是对其配置文件 Makefile 的语法的学习。

1.3 Makefile在哪里

Makefile 是用来指导make对源代码进行编译的,因此在一个多目录结构的工程项目中,凡是有源码出现的目录,都会有一个 Makefile 去管理,而所有的 Makefile,都通过工程项目顶层目录下的 Makefile 去直接或简洁调用。

make是一个程序,是用来解析Makefile文件的,Makefile需要自己写。

2. 目标与依赖

目标和依赖是 Makefile 语法中最基本的概念,假设有一个源文件 a.c,编译生成 a.o ,那么前者是依赖,后者 a.o 是目标,但进一步将 a.o 编译成可执行文件 a,那么 a.o 此时就变成依赖,最终的文件 a 是目标,因此目标和依赖是相对的概念。

在使用make时就算目录下已经有了对应的.o .c文件,只要文件被改过,make就会编译改动过的文件。

之前对gcc编译的理解:只有一个过程gcc main.c -o main 

现在对gcc编译的理解分为四步

  1. 预编译(在编译C语言基本源码语法之前编译器要做的事):进行宏替换和头文件插入,生产.i文件
    gcc -E main.c -o main.i
  2. 编译:检查C语言语法是否有误,无误生成.s(汇编文件)
    gcc -S main.i -o main.s
  3. 汇编:检查汇编语法是否有误,无误生产.o目标文件,.o文件是二进制文件,但不能执行,在系统平台里面,想要运行C语言程序需要动态链接所需要的动态库才能执行
    gcc -c main.s -omain.o
  4. 链接main.o链接该程序所需要的库文件,最终生成可执行的二进制文件。
    gcc main.o -o main

Makefile1.0

 编译单个文件

Makefile2.0

编译多个文件

但是上面两个看下来都不足以实现编译成千上万个文件,于是有了自动化编译的第三版本

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值