C语言开发工具的使用---Make和Makefile
一. 什么是make工具?
一个软件工程常会包含几十上百个文件,如果每次编译都通过命令行手动编译往往很麻烦且效率低下.在Linux中同样有一个功能强大,方便使用的工程管理工具,这就是make
1.1 Makefile的文件说明:
使用make文件,首先要编写makefile文件.一个makefile文件包含五个方面的内容:
- 具体规则
- 隐含规则
- 定义含量
- 指令
- 注释
1.2 Makefile的规则:
因为有工具可以自动生成Makefile文件,所以只要能读懂Makefile的内容,并根据需要进行修改就可以了
Makefile内容的核心是一系列的规则,这些规则告诉make程序要做的事以及做这件事的依赖的条件.规则的基本格式是:
Target : dependency
(Tab字符)command
Target(目标) :通常是要产生的文件的名称
Dependency(依赖) :指用来输入从而产生目标的文件
command(命令) :是make执行的动作,一个规则可以有多条命令,每个命令占一行.命令行的第一个字符是Tab键.
示例 :
objects = main.o mouse.o command.o display.o //定义objects参量
CC = gcc //定义 CC变量
CFLAG = -Wall -O2 -g
game : $ (objects) //game是最终目标 $(objects)调用objects的值
$ (CC) -o edit $(objects) //$(CC)取CC变量的值 编译main.o mouse.o command.o display.o并重命名为edit
main.o : defs.h //main.o是目标文件 defs.h是依赖文件
mouse.o : defs.h command.h //mouse.o是目标文件defs.hcommand.h是依赖文件
command.o : defs.h command.h //main.o是目标文件defs.hcommand.h是依赖文件
display.o : defs.h buffer.h //main.o是目标文件defs.h buffer.h是依赖文件
.PHONY : clean //声明clean是个伪命令,可以不需要依赖条件
clean :
$(RM) edit $(objectd)
game的生成规则包含了规则的三个基本要素:目标,依赖,命令;main.o等规则没有命令,属于隐含规则.clean规则没有依赖,不属于编译的内容,只是完成一个指定的动作.隐含规则能够告诉make使用传统的标准方法完成任务.
1.3 makefile中的几个特殊变量
$@ : 用在生成规则中,表示当前目标
$< : 用在生成规则中,表示当前目标的第一个依赖目标
$^ : 用在生成规则中,表示当前目标的所有依赖目标
:= : 直接赋值,新值直接覆盖原来的值
?= : 条件赋值,如果原来无值则赋值,否则保持原来的值
+=: 加法赋值,新值附加在原来的值后面
= : 递归赋值,如果右侧包含其他变量,当这些变量的值变化时,被赋值变量的值也随之变化.