Makefile的初学
Makefile文件的书写规则如下:
<target> : <prerequisites>
[tab] <commands>
首先写一个target
,这里可以自己进行取名
然后prerequisites
里是前置条件,一般来说写上所需要的条件(如文件)
第二行开始必须用tab
再接命令。
举个例子:
我们先创建main.c
fun1.c
fun2.c
fun.h
代码如下:
main.c
#include "fun.h"
int main()
{
fun1();
fun2();
return 0;
}
fun.h
#include<stdio.h>
void fun1();
void fun2();
fun1.c
#include "fun.h"
void fun1()
{
puts("This is function 1!");
}
fun2.c
#include "fun.h"
void fun2()
{
puts("This is function 2!");
}
现在我们来编写一个简单的Makefile:
all: main.o fun1.o fun2.o
gcc -o main main.o fun1.o fun2.o
main.o: main.c
gcc -c main.c
fun1.o: fun1.c fun.h
gcc -c fun1.c
fun2.o: fun2.c fun.h
gcc -c fun2.c
.PHONY: clean
clean:
rm *.o
都是按照上面的规则来编写的,对照着规则能看的非常清晰。
我们这里用了个.PHONY
,why?
假如你当前目录下有一个文件名叫做clean
,那么make clean
将不会执行 clean
命令。
执行的时候我们只需要执行make <target>
就行了,执行情况如下:
[qblp@qblp-pc fil]$ ls
fun1.c fun2.c fun.h main.c Makefile
[qblp@qblp-pc fil]$ make all
gcc -c main.c
gcc -c fun1.c
gcc -c fun2.c
gcc -o main main.o fun1.o fun2.o
[qblp@qblp-pc fil]$ ls
fun1.c fun1.o fun2.c fun2.o fun.h main main.c main.o Makefile
[qblp@qblp-pc fil]$ ./main
This is function 1!
This is function 2!
[qblp@qblp-pc fil]$ make clean
rm *.o
[qblp@qblp-pc fil]$ ls
fun1.c fun2.c fun.h main main.c Makefile
[qblp@qblp-pc fil]$
更多知识参考:
阮一峰老师的博客