【CO004】操作系统实践笔记6 —— Makefile

笔者:YY同学

生命不息,代码不止。好玩的项目尽在GitHub



什么是 Makefile?

Makefile 是一个编译管理文件,可以批量处理多个编译命令。设计者可以通过 Makefile 架构使得源文件按照自己的预期进行编译。在编写好 Makefile 之后只需要使用 make 命令编译即可。


文件结构

在这里插入图片描述

首先我们若要生成可执行文件 sum,则需要 main.osum.o 两个文件,而生成这两个目标代码文件,就需要各自的 .c.h 编译而成。


代码实例

简易版本:

sum: main.o sum.o
	gcc -o sum main.o sum.o

main.o: main.c sum.h
	gcc -c main.c

sum.o: sum.c sum.h
	gcc -c sum.c

复杂版本:

CPP:=gcc
FLAG=-Wall
DEBUG:=-g
RELEASE:=-O2
OBJ_DIR:=./obj

sinewave: sinewave.o intarray.o
	${CPP} ${DEBUG} ${FLAG} -lm $^ -o sinewave
	if [ ! -d ${OBJ_DIR} ]; then mkdir ${OBJ_DIR}; fi
	mv *.o ${OBJ_DIR}

%.o: %.c
	${CPP} ${DEBUG} ${FLAG} ${RELEASE} -c $^

clean:
	rm -f *.o

  • 目标变量(Target)需要顶格写,后面跟 : 表示需要哪些依赖文件,依赖文件之间用空格隔开。
  • 脚本变量后面跟 := 赋值符号。
  • 命令部分需要以 \t(Tab 键开头),引用脚本变量时候需要用 ${} 把变量包裹起来。
  • -Wall 参数表示开启所有警告报错(Warning All),O2 表示开启二级代码优化。
  • $^ 代指 Target 行出现过的每一个依赖文件。因此第 8 行的意思是需要 sinewave.ointarray.o 两个文件进行编译。% 表示文件同名,第 13 行的意思是需要编译所有 .c 源文件并且生成同名的 .o 文件。
  • clean 部分一般用于删除中间生成的目标代码(.o),在运行 Makefile 的时候一般会因为找不到依赖目标而不执行,所以需要使用 make clean 命令进行手动删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值