Makefile入门实例

Makefile概述

makefile文件是用来描述整个工程的编译连接规则的,主要描述哪些源文件需要编译以及如何编译,如何生成我们想要的可执行文件。一旦Makefile文件写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件的开发效率。

Makefile规则

Makefile主要有三大规则:目标、依赖条件和命令

目标:是我们要生成的文件

依赖:是要生成的文件是通过哪些文件来生成的

命令:是如何将依赖中的文件生成目标文件

格式如下:

目标:依赖条件

tab缩进)命令

Makefile简单实例

test:main.c add.c sub.c(.c文件所在路径和Makefile是同一个路径,如果不是同一个目录需要显示指定.c文件的路径)
	gcc main.c add.c sub.c -o test

其中test为目标,依赖条件是main.c、add.c和sub.c,命令是gcc main.c add.c -o test。

意思就是test是由main.c、add.c、sub.c文件通过gcc命令来生成的

Makefile实例进阶1

上面方式生成的test效率会比较低,因为只要任何一个依赖文件进行修改都需要重新编译所有文件。为了让只编译修改的文件,可以将上述的Makefile修改成如下形式

test:main.o add.o sub.o
   gcc main.o add.o sub.o -o test

main.o:main.c
   gcc -c main.c

add.o:add.c
   gcc -c add.c

sub.o:sub.c
   gcc -c sub.c

在上面的Makefile中,test、main.o、add.o、sub.o都是目标文件,在有多个目标文件的情况下,第一个目标文件为我们最终的目标文件,下面的其他所有目标文件都是用来生成第一个目标文件的

上面的实例中,test不再由.c文件来生成了,而是由.o文件来生成。当其中一个.c文件修改了,只会执行对应的命令生成.o文件,不需要所有的文件都重新编译。例如:mian.c修改了,只会执行gcc -c main.c来生成main.c文件,add.o和sub.o不需要重新编译生成。

由上面生成规则可以知道,Makefile只有检查到依赖项的生成时间比目标的时间晚,才会重新编译

Makefile实例进阶2

如果依赖文件很多,那按照上面的编写方法来写Makefile文件效率会很低,而且会写的很长。所以引入Makefile提供的变量来将上面的内容写的更加简洁一些。

obj=main.o add.o sub.o
target=test
$(target):$(obj)
    gcc $(obj) -o $(target)

%.o:%.c
gcc -c $< -o $@

obj为自定义的变量,变量值为main.o add.o sub.o

target也是自定义的变量,变量值为test

Makefile中取变量值的方式是通过$()来取的

%.o:%.c类似于for循环,遍历target的依赖条件obj的时候,会逐个匹配的,%号是正则匹配的。例如先找到main.o时,%.o就是main.o,%.c就是mian.c,然后“gcc -c $< -o $@”就表示由main.c生成main.o.

其中&lt;和&lt;和<@是Makefile中自动的变量,含义如下:

$<:表示规则中的一个依赖
$@:表示规则中的目标
$^:表示规则中的所有依赖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值