写一个简单的makefile

如果不写makefile文件的话,要改动某一个源文件或头文件的话就又要进行全部编译,一般一个大型项目往往有几千个源文件组成,全部编译一次要几小时,只改一个源文件就要重新全部编译一次肯定是不合理的。makefile文件可以进行自动的判断哪些源文件需要重新编译和链接。我们假设有3个源文件和3个头文件组成: main.c stack.c maze.c main.h stack.h maze.h
写一个makefile文件格式(保存为makefile或Makefile)
main: main.o stack.o maze.o
gcc main.o stack.o maze.o -o main
main.o: main.c main.h stack.h maze.h
gcc -c main.c
stack.o: stack.c stack.h main.h
gcc -c stack.c
maze.o: maze.c maze.h main.h
gcc -c maze.c

通常makefile文件中都会有一个clean规则,用于清除编译过程中产生的二进制文件保留源文件。
clean:
@echo "cleaning project"
-rm main *.o
@echo "clean completed"
.PHONY: clean
makefile文件编写好后,把它和源代码放在同一个目录下,用make命令执行。

注意1. makefile文件中每一指令行都必须是一个Tab开头而不能是空格
2. make执行的命令前面加了@表示不显示命令本身只显示命令结果
3. 如果命令前面加了-号表示即使这条命令出错,make也会继续执行后续指令。通常rm和mkdir这两条指令前都要加-号,因为可能要删除的文件不存在或要创建的目录已存在,这两个命令都有可能出错。

上述makefile还可以写得更简单一点,一个目标依赖的所有条件不一定要写在一天规则中。如:
main.o: main.h stack.h maze.h
main.o: main.c
gcc -c main.c
就相当于:main.o: main.c main.h stack.h maze.h
gcc -c main.c
并且可以利用make的内在隐含规则,把提取出来的部分省略去写得更简单:
main.o: main.h stack.h maze.h

所以上述makefile文件可以写成更简单的形式,如下:
main: main.o stack.o maze.o
gcc -c main.o stack. maze.o
main.o: main.h stack.h maze.h
stack.o: stack.h main.h
maze.o: maze.h main.h
clean:
-rm main *.o
.PHONY: clean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值