Makefile写法

一、Makefile文件的格式:

<target> : <prerequisites> 
tab <commands>(命令行的开头一定要用tab键,不能按空格)
如果命令行和依赖文件在同一行则要用分号;隔开

二 规则

1 目标:一般是可执行文件或伪目标

第一个目标是“终极目标”,即最终要生成的可执行文件,比如

app:main.c add.c sub.c mul.c
    gcc main.c add.c sub.c mul.c -o app
    这里的app即后面这些依赖文件要生成的目标文件

或者伪目标作为“终极目标”

.PHONY : all 
all : prog1 prog2 prog3 

prog1 : prog1.o utils.o 
	cc -o prog1 prog1.o utils.o 

prog2 : prog2.o 
	cc -o prog2 prog2.o 

prog3 : prog3.o sort.o utils.o 
	cc -o prog3 prog3.o sort.o utils.o 
#我们可以使用“make all”命令来编译所有的目标
#(如果把all置成第一个目标,如:
# all : prog1 prog2 prog3
# .PHONY : all
#那么只需执行“make”),
#我们也可以使用 “make prog2”来单独编译目标“prog2”

可执行文件不用说了,咱们说说伪目标
伪目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。使用伪目标的原因:

  1. 避免在我们的Makefile中定义的只执行命令的的目标和工作目录下的实际文件出现名字冲突。
  2. 提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心。
列几个伪目标
“all”:所有目标的目标,其功能一般是编译所有的目标。
"clean”:删除所有被make创建的文件。
“install”:安装已编译好的程序,即把执行文件拷贝到指定的目标中。
print”:列出改变过的源文件。
“tar”:把源程序打包为一个tar文件。
“dist”:创建一个压缩文件,一般是把tar文件压成Z文件。或是gz文件。
“TAGS”:更新所有的目标,以备完整地重编译使用。
“check”和“test”:这两个伪目标一般用来测试makefile的流程。

2 变量

为了进一步简化编辑和维护 Makefile,make 允许在 Makefile 中创建和使用变量。变量是在Makefile 中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。在具体要求下,这些值 可以代替目标体、依赖文件、命令以及 makefile 文件中其他部分
变量定义有两种方式:递归展开方式,简单方式
递归展开方式定义的变量是在引用在该变量时进行替换的,即如果该变量包含了对其他变量的应用,则在引用该变量时一次性将内嵌的变量全部展开,虽然这种类型的变量能够很好地完成用户的指令,但是它也有严重的缺点,如不能在变量后追加内容(因为语句:CFLAGS = $(CFLAGS) -O 在变量扩展过程中可能导致无穷循环)。
递归展开方式的定义格式为:VAR=var。
简单扩展方式的定义格式为:VAR:=var。
Make 中的变量使用均使用格式为:$(VAR)

sunq:kang.o yul.o
	gcc kang.o bar
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值