Linux的make与makefile的基础知识

1.了解make工程管理器
所谓工程管理器是指管理工程的工具。假如我们面对是一个上百个文件的代码构成的项目,假如其中几个文件进行了修改,按照之前所学的gcc编译工具,就不得不把项目内所有的文件重新编译一遍,因为编译器并不知道哪些文件是最近更新的,但那些没有改动的源代码根本不需要重新编译,而只须把它们重新链接进去即可。所以,人们就希望有这样一款能够自动识别更新的文件代码并管理项目的软件,所以make工程管理器也应运而生了。
make工程管理器是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入makefile文件的内容来自动执行大量的编译工作。用户只需编写一次简单的编译语句就可以。这不仅提高了工作效率,而且便于管理。

2.了解makefile文档
make是怎样完成这些神奇的工作呢?它是通过makefile文档做到的。makefile是一个文本形式的数据库文件,其中包含一些规则,它告诉make编译哪些文件、怎样编译以及在什么条件下去编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样。make在执行时就会找到makefile文件,会自动根据修改情况完成源文件对应.o文件的更新、库文件的更新和最终可执行程序的更新。对于不需要重建的文件,make什么也不做。

3.编写makefile
makefile的格式,既然make工程管理器的一切行为都依据makefile,所以编写好makefile是至关重要的。

一个简单的makefile格式通常的格式是:
target : dependency [dependency [„] ]
(加一个tab键)COMMAND**

target:目标体。即make最终需要创建的东西。另外,目标也可以是个make执行的动作名称,如目标“clean”,可以称这样的目标是“伪目标”。
dependency:依赖体。依赖体通常是编译目标体要依赖的一个或多个其它文件。
command:命令。为了从指定的依赖体创建出目标体所需执行的shell命令。

一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令的第一个字符必须是制表符【Tab】,如果使用空格会产生问题,make会在执行过程中显示Missing Separator(缺少分隔符)并停止。
target是需要创建的二进制文件或目标文件。dependency是在创target
时需要输入一个或多个文件的列表。命令序列是创建target文件所需要步骤,如编译命令。此外,除非特别指定,否则make的工作目录就是当前目录。

实例
目标体:hello
依赖文件:hello.c hello.h
执行的命令:gcc hello.c –o hello

你可能感兴趣的:(linux)