您的位置:首页 > 运维架构 > Linux

MAKEFILE学习笔记--简介

2016-03-02 11:08 495 查看

MAKEFILE 学习笔记 —— 简介

一. 编译与链接

把源文件编译成中间代码文件,在 Windows 下也就是 .obj 文件,Linux 下是 .o 文件,即 Object File,这个动作叫做编译(compile)。编译时,编译器检查语法的正确性,函数与变量的声明的正确性。只有所有的语法正确,编译器就可以编译出中间目标文件,每个源文件对应一个目标文件。

把大量的 Object File 合成可执行文件,这个动作叫作链接(link)。链接时,主要链接全局变量与函数。

二. 编译规则

如果工程没有被编译过,则将所有的源文件进行编译并链接为目标程序。

如果该工程,有几个 c 文件被改变了,只重新编译这几个 c 文件 。

如果是头文件被改变了,则只重新编译引用这几个头文件的 c 程序。

三. MAKEFILE 格式

makefile 是通过文件之间相互依赖进行编译并链接的,即目标文件是由哪些文件生成的。格式如下:

target: files
command


target : 生成的目标文件

files : 要生成 target 所需要的文件或是目标

command:编译或链接命令

注:

command 命令一定以 TAB 键开始,并且前面不能有空格,若使用 vim在 /etc/vim/vimrc 文件中将 set expandtab 删除,它将导致格式错误。

代码例子:

aaa:    main.o  func.o
gcc -o aaa  main.o  func.o
main.o: main.c  ex2.h
gcc -std=c99 -c main.c
func.o: func.c  ex2.h
gcc -std=c99 -c func.c

clean:
rm -fr *.o aaa


四. MAKE 的工作过程

找到当前目录下名为“makefile”或“MAKEFILE”文件

再“makefile”中找到第一个 target,在上面的代码中为 aaa,并把这个文件作为最终的文件

如果 aaa 不存在或者 aaa 所依赖的文件比如 main.o 比较新,那么会重新运行 gcc -o aaa main.o func.o 来生成 aaa

如果 aaa 所依赖的.o文件不存在,比如 main.o 不存在,则运行 gcc -std=c99 -c main.c 来生成 main.o,在运行 2 来生成 aaa

依次类推直到生成 aaa。

参考文献

[1] 陈浩 《跟我一起写Makefile》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息