Makefile小知识

Makefile

Makefile语法规则

  1. 显式表达
    目标文件:依赖文件
    指令
    (第一个目标文件是最终生成的文件)
  2. 伪指令
    .PHONY:
    指令名:
    指令
  3. 注释使用#

基础用法

现在有一个hello.c源文件,我想生成一个可执行性文件。安装C程序预编译、汇编、编译、链接的过程生成可执行文件hello。步骤如下:
1. 在该目录下创建Makefile文件。文件名为Makefile,无后缀名
2. 编辑Makefile文件
3. 执行make或者make clear

hello:hello.o
	gcc hello.o -o hello #注意前面有一个tab键
hello.o:hello.S
	gcc -c hello.S -o hello.o
hello.S:hello.i
	gcc -S hello.i -o hello.S
hello.i:hello.c
	gcc -E hello.c -o hello.i
#伪指令,删除中间文件
.PHONY:
clear:
	rm -rf hello.i hello.S hello.o

使用变量

Makefile用三个符号表示变量,分别是=,+=,:=,其中
=表示替换
+=表示追加
:=表示常量
当在Makefile中使用变量时,需要在前面添加$,仍然以前面的例子为例。其Makefile可以更改为

TAR=hello
OBJ=hello.o
CC:=gcc
$(TAR):$(OBJ)
	$(CC) $(OBJ) -o $(TAR) #注意前面有一个tab键
hello.o:hello.c
	gcc -c hello.c -o hello.o
#伪指令,删除中间文件
.PHONY:
clear:
	rm -rf hello.i hello.S hello.o

隐含规则

%.c表示任意的.c文件
%.o表示任意的.o文件
*.c表示所有的.c文件
*.o表示所有的.o文件

假设现在文件夹中有8个文件,分别是1.h,2.h,3.h,1.c,2.c,3.c,main.h和main.c其Makefile文件可以如下:

TAR=main
OBJ=main.o 1.o 2.o 3.o
CC:=gcc
$(TAR):$(OBJ)
	$(CC) $(OBJ) -o $(TAR) #注意前面有一个tab键
#
#%.o:%.c
#	$(CC)  -c %.c -o %.o
#上面注释部分不能被执行,只是为了方便理解,对于任意的.c文件,都生成与之对应的.o文件
#伪指令,删除中间文件
.PHONY:
clear:
	rm -rf $(OBJ)

通配符

Makefile支持四种通配符
$@表示所有的目标文件
$^表示所有的依赖文件
$<表示第一个依赖文件
$?表示所有比目标还要新的依赖文件列表

我们可以将上面的Makefile改写为可运行的

TAR=main
OBJ=main.o 1.o 2.o 3.o
CC:=gcc
$(TAR):$(OBJ)
	$(CC) $^ -o $@ #注意前面有一个tab键

%.o:%.c
	$(CC)  -c $^ -o $@

#伪指令,删除中间文件
.PHONY:
clear:
	rm -rf $(OBJ)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值