Linux下的Makefile(一)

来源:互联网 发布:证券开户数据 编辑:程序博客网 时间:2024/05/17 08:28

Linux下的Makefile(一)

关于程序编译和链接
在UNIX下,把源文件进行编译生成 .o文件,即Object File,然后把大量的ObjectFile合成执行文件,这个动作叫做链接。
编译
编译需要的是语法正确,含税变量的声明正确。
链接
链接需要告诉编译器你的头文件所在的位置。连接时,主要是了解函数和全局变量。
库文件
大多数时候,由于源文件太多,连接时需要明显的指出中间目标文件名,所以我们会给中间目标文件打个包,UNIX下是Archive File,也就是 .a文件(Windows下是 .lib文件,即库文件

Makefile描述整个工程的编译,链接规则,其中包括,工程中哪些文件需要编译,及如何编译,需要创建哪些库文件及如何创建这些库文件,如何组后生成我们想要的文件。

target也就是一个目标文件,可以说Object File,也可以是执行文件,格式为 target:main.o stack.o

变量
赋值
objects = main.o kbd.o command.o disolay.o\
insert.o search.o files.o utils.o (\代表换行)
使用变量
target:$(objects)
有新的 .o文件加入,只需要简单地修改一下objects变量就可以了。

make的自动推导
GUN的make很强大,他可以自动推导文件以及文件依赖关系后面的命令,所以,我们不用在每个.o文件后面加上编译命令。如果make找到一个whatever.o,那么whatever.c就会使whatever.o的依赖文件。并且gcc -c whatever.c 也会被推导出来
例如
target:(object)cc(objects) -o target

main.o:defs.h
disapaly.o:defs.h buffer.h(自动推导)
通过make的自动推导功能,可以将大量头文件收拢起来,make会自动识别依赖关系
例:
objects = main.o kbd.o command.o display.o\
insert.o search.o files.o utils.o

target:(objects)cc(objects) -o target

$(objects):defs.h\
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h

清空目标文件的规则
.PHONY:clean
clean:
-rm *.o -rf

每条命令的开头必须是一个tab

0 0
原创粉丝点击