[Linux]Makefile入门
关于make命令,执行make命令的时候,系统会在当前目录下找名为Makefile或makefile的文件进行编译,如果你的makefile是别的名字的话,可以使用make –f filename来指定你的makefile。
直接写一个简单的makefile吧:
假设有一个源文件:main.c
那么用gcc编译它的命令是:gcc main.c –o main
我创建一个名为makefile的文件,makefile的基本格式为“目标:依赖 命令”
makefile内容为:
main : main.c gcc main.c –o main |
在终端执行make命令就可以得到main文件了
假设我有a.c,b.c, main.c三个源文件,最终要编译成一个名为main的可执行文件
则makefile内容为
main : a.o b.o main.o gcc a.o b.o main.o -o main main.o : main.c gcc -c main.c b.o : b.c gcc -c b.c a.o : a.c gcc -c a.c # 用".PHONY {目标名}"定义一个伪目标 # 用"make {目标名}"执行该伪目标 .PHONY : clean clean : @rm -f main *.o @echo 'clean' |
此时执行make命令,终端会显示系统执行的每条命令,如果你不想系统显示它执行的命令,在每条命令的前面加上“@”即可。
如果我想清除掉我编译后的文件,可以rm命令,当然我们也可以清除的功能写入到makefile里边。
makefile提供了一个伪目标的功能,可以为你的makefile提供额外的功能。
下面是提供了clean功能的makefile
main : a.o b.o main.o @gcc a.o b.o main.o -o main @echo ok @gcc -c main.c b.o : b.c @gcc -c b.c a.o : a.c @gcc -c a.c # 用".PHONY {目标名}"定义一个伪目标 # 用"make {目标名}"执行该伪目标 .PHONY : clean clean : @rm -f main *.o @echo clean |
执行make clean即可进入clean的功能
此外,makefile提供了系统默认的自动化变量
$^:代表所有依赖文件
$@:代表目标
$<:代表第一个依赖文件
所以我们可以用
gcc $^ -o $@
代替刚刚makefile中的
gcc a.o b.o main.o -o main
关于makefile的附件:http://pan.baidu.com/share/link?shareid=135850&uk=3238766853