MAKEFILE学习笔记--简介

MAKEFILE 学习笔记 —— 简介


一. 编译与链接

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

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


二. 编译规则

  1. 如果工程没有被编译过,则将所有的源文件进行编译并链接为目标程序。
  2. 如果该工程,有几个 c 文件被改变了,只重新编译这几个 c 文件 。
  3. 如果是头文件被改变了,则只重新编译引用这几个头文件的 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 的工作过程

  1. 找到当前目录下名为“makefile”或“MAKEFILE”文件
  2. 再“makefile”中找到第一个 target,在上面的代码中为 aaa,并把这个文件作为最终的文件
  3. 如果 aaa 不存在或者 aaa 所依赖的文件比如 main.o 比较新,那么会重新运行 gcc -o aaa main.o func.o 来生成 aaa
  4. 如果 aaa 所依赖的.o文件不存在,比如 main.o 不存在,则运行 gcc -std=c99 -c main.c 来生成 main.o,在运行 2 来生成 aaa
  5. 依次类推直到生成 aaa。

参考文献

[1] 陈浩 《跟我一起写Makefile》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值