Makefile使用教程(二)

案列一

edit:main.o display.o insert.o files.o utils.o
	gcc -o edit main.o display.o insert.o files.o utils.o
main.o: main.c main.h
	gcc -c main.c -o main.o
display.o: display.c display.h
	gcc -c display.c -o display.o
insert.o: insert.c insert.h
	gcc -c insert.c -o insert.o
files.o: files.c files.h
	gcc -c files.c -o files.o
utils.o: utils.c utils.h
	gcc -c files.c -o files.o
clean: rm edit main.o display.o insert.o files.o utils.o

输入命令make,就可以生成可执行文件edit和中间目标文件*.oclean不是动作名称,不是文件,是标签,不依赖其他任何文件。

Makefile变量

变量可以代替目标文件,依赖文件,命令和其他部分。
变量定义有两种方式:递归展开方式,简单展开方式。
递归展开方式:VAR=var
简单扩展方式:VAR:=var
简单展开只能展开一次。
变量使用格式:$(VAR)

自定义变量

预定义变量

格式含义
AR汇编程序的名称,默认值为as
CCC编译器的名称,默认值为cc
CPPC预编译器的名称,默认值为$(CC) –E
CXXC++编译器的名称,默认值为g++
FCFORTRAN编译器的名称,默认值为f77
RM文件删除程序的名称,默认值为rm –f
ARFLAGS库文件维护程序的选项,无默认值
ASFLAGS汇编程序的选项,无默认值
CFLAGSC编译器的选项,无默认值
CPPFLAGSC预编译的选项,无默认值
CXXFLAGSC++编译器的选项,无默认值
FFLAGSFORTRAN编译器的选项,无默认值

自动变量

格式含义
$*所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$<第一个依赖文件的名称
$?所有时间戳比目标文件晚的依赖文件,并以空格分开
$@目标文件的完整名称
$^所有不重复的依赖文件,以空格分开
$%如果目标是归档成员,则该变量表示目标的归档成员名称
案例
OBJS=main.o display.o insert.o files.o utils.o
CC=gcc
CFLAGS=-Wall -O -g
edit:$(OBJS)
	$(CC) $^ -o $@
main.o: main.c main.h
	$(CC) $(CFLAGS) -c $< -o $@
display.o: display.c display.h
	$(CC) $(CFLAGS) -c $< -o $@
insert.o: insert.c insert.h
	$(CC) $(CFLAGS) -c $< -o $@
files.o: files.c files.h
	$(CC) $(CFLAGS) -c $< -o $@
utils.o: utils.c utils.h
	$(CC) $(CFLAGS) -c $< -o $@
clean: rm edit $(OBJS)

Makefile规则

1、隐形规则
所有的.o文件都可以自动由.c文件使用命令$(CC) $(CPPFLAGS)$(CFLAGS) -c file.c -o file.o生成。
只能查找相同文件名,不同后缀名的文件,如kang.o文件必须由kang.c文件生成。
所以上面的案例中,命令$(CC) $(CFLAGS) -c $< -o $@可以省去。

OBJS=main.o display.o insert.o files.o utils.o
CC=gcc
CFLAGS=-Wall -O -g
edit:$(OBJS)
	$(CC) $^ -o $@
main.o: main.c main.h
display.o: display.c display.h
insert.o: insert.c insert.h
files.o: files.c files.h
utils.o: utils.c utils.h
clean: rm edit $(OBJS)

2、模式规则
能引入用户自定义变量,为多个文件建立相同的规则,简化Makefile的编写。
相关文件,必须用%标明。

环境变量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值