Linux编程工具之make
在具有很多源代码的程序里,修改了其中的一些源文件,在编译时需要重新编译所有的文件是很浪费时间的,如何能只编译那些修改过的源文件,而不全部重新编译。一种方法是标记修改过的文件,只编译这些文件。但是大程序由很多的文件组成,标记这些文件带来巨大的工作量,而且很难把握他们之间的依赖关系。而make实用程序给我们带来了希望,他很好的解决了标记、依赖、重新编译这一系列的问题。下面让我们开始我们的make之旅。
1、
make的原理:
在linux下每个文件被修改后都会留下时间标记,如果源代码被修改的时间比目标文件晚,则需要重新编译文件。而所有依赖于这个目标文件的所有文件都要重新编译。
2、makefile文件:
make必须依靠一组的指令指示他如何编译已改变文件,这组代码保存在makefile文件里面。默认情况下makefile文件在当前编译的文件所在的目录下。除了这个文件外,也可以在make选项中加其他以.make后缀的文件:make –f prog.mak
3、 相关行:
相关行详细的说明了文件之间的依赖关系。
格式: 目标文件:依赖文件;linux命令
或 目标文件:依赖文件
[tab]Linux命令
target file:dependent files;linux command
or target file:dependent files
[tab] linux command
4、相关行的运行规则:
5、蕴涵make的相关性:
Make的蕴涵相关性集自动的使用于源代码和目标代码
makefile
bookrec:main.o io.o
gcc main.o io.o –o bookrec
main.o:types.h //库函数的相关性必须另外表明
执行make,就会自动检查main.o和io.o的源代码文件main.c和io.c是否被更新。这样可以缩小makefile文件。
6、使用目标参数具体指定相关行
bookrec:main.o io.o
gcc main.o io.o –o bookrec
main.o:types.h
print:
lpr main.o io.o //make print 就可以指定运行该相关行
7、更新文件的时间标记:touch 和-t
$touch main.c //更新了main.c的时间标记
8、产生变量:
Makefile
CFILES= mian.c io.c
OBJECTS= main.o io.o //变量的定义
bookrec: $(CFILES) //变量的使用
gcc –o $(CFILES)
8、make预定义的变量
预定义变量
默认值
说明
CC
gcc
C编译器
CFLAGS
-O
C编译选项
AS
as
汇编
ASFLAGS 汇编选项
FC
f77
Fortran编译器
FELAGS
Fortran编译器选项
LD
ld
加哉连接目标文件
LDFLAGS
加载选项
LEX
lex 词法分析器
LFLAGS
词法选项
MAKE
make make实用程序
MAKEFLAGS
b
make选项