1、makefile
首先呢make在执行时,需要一个命名为makefile的文件。
makefile文件描述了整个工程的编译,连接等规则。
其中包括:工程的哪些源文件需要编译以及如何编译;
需要哦创建哪些库文件以及如何创建这些库文件,如何最后产生我们想要的可执行文件。
例程:
hello : main.o func1.o func2.o
main.o : main.c
func1.o : func1.c
func2.o : func2.c
.PHONY : clean
clean:
这个例子连伪目标也说明了,其中伪目标会在后面有介绍~~
2、makefile(术语)
规则:
用于说明如何产生一个或者多个目标文件~~
格式:
targets : prerequisites
targets:目标;
prerequisites:依赖
command:命令(要有空格,就是按下TAB键)
例如:
main.o : main.c
3、目标
在makefile中,规则的顺序是很重要的~~
因为在一个makefile钟只有一个最终目标,其他的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么~~
一般来说,定义在makefile中的目标可能会有很多,但是:
第一条规则中的目标将被确立为最终目标~~
4、文件名
make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当时当名字不为这两个指定的文件名时,可以用如下方法指定:
make -f 文件名
5、伪目标
makefile中把那些
没有任何依赖(也就是没有prerequisites~~),只有执行动作的目标
成为“伪目标”(phony targets)。
例如:
.PHONY : clean
clean:
就是删除这些文件,但是这个指令没有依赖哦~~
“.PHONY”将“clean”目标声明为伪目标~~
6、变量
最开始的例子可以这样写:
obj=main.o func1.o func2.o func3.o
hello : $(obj)
对于多文件还是很方便的~~
在makefile中,存在系统默认的自动变化量:
▲ $^:代表所有的依赖文件
▲ $@:代表目标
▲ $<:代表第一个依赖文件
上面的还可以改写成这样:
hello : main.o func1.o func2.o
7、杂项
makefile中“#”字符后的内容被视作注释。
在gcc前面加上@可以取消显示回显(就是不显示gcc这句话了~~)