[Linux]Makefile入门

来源:互联网 发布:mac怎么关掉程序快捷键 编辑:程序博客网 时间:2024/04/28 02:07

转自:

http://www.cnblogs.com/little221/archive/2012/12/02/2798401.html



[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.cb.cmain.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


0 0
原创粉丝点击