初识makefile的结构

makefile 的意义

makefile 用于定义源文件之间的依赖关系

makefile 用于说明如何编译各个源文件并生成可执行文件

依赖的定义:

targets : prerequisites ; command1

'\t' command2

makefile 中元素的意义

targets

  • 通常是需要生成的目标文件名
  • make 所需执行的命令名称

prerequisites

  • 当前文件所依赖的其他目标或文件

command

  • 完成目标所需要执行的命令

规则中的注意事项

targets 可以包含多个目标

  • 使用空格对多个目标名进行分割

prerequisites 可以包含多个目标

  • 使用空格对多个依赖进行分割

[ Tab ] 键:'\t'

  • 每个命令行必须以 [ Tab ] 字符开始
  • [ Tab ] 字符告诉 make 此行是一个命令行

续行符:'\'

  • 可以将内容分开写到下一行,提高可读性

一个 makefile 的依赖示例

依赖规则 

当目标对应的文件不存在,执行对应命令

当依赖在时间上比目标更新,执行对应命令

当依赖关系连续发生时,对比依赖链上的每一个目标

小技巧

makefile 中可以在命令前加上 @ 字符,作用为命令无回显

makefile 的依赖规则

makefile

all : test
	@echo "hello all"
test :
	@echo "hello test"

测试结果如下所示:

all 依赖于 test,所以先执行 test 所对应的命令,再执行 all 所对应的命令;命令前加上@,则不打印命令所对应的行。

第一个 make 的编译案例 

小技巧 

工程开发中可以将最终 可执行文件名 和 all 同时作为 makefile 中第一条规则的目标。

 这样做的好处是:我们可以不用记住最终的目标名,只需要 make all,就可以生成最终目标。

 

初探 makefile

makefile

hello.out all : func.o main.o
	gcc -o hello.out func.o main.o

func.o : func.c
	gcc -o func.o -c func.c

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

当前目录下的文件如下所示:

测试结果如下所示:

 hello.out 依赖于 func.o 和 main.o,由于 fun.o 和 main.o 不存在,make 会查找是否能生成 fun.o 和 main.o,func.o 依赖于 func.c,生成了 func.o;main.o 依赖于 main.c,生成了 main.o;hello.out 所依赖的文件都存在了,最后生成 hello.out。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值