LINUX中的make

来源:互联网 发布:云存储解决方案 知乎 编辑:程序博客网 时间:2024/06/11 06:43

make工作原理

make是一个工具,主要负责一个软件工程中多个源代码的自动编译工作,还能进行环境检测、后期处理等工作。

make的主要任务是根据makefile文件(一个脚本文件,类似windows下的bat文件)中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和目标程序生成工作。

make工具可以识别出工程中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,大多数IDE中都有这个命令,比如Delphi中的make,Visual C++的nmake,LINUX下GNU的make,make是一种工程方面的编译方法。

make按照makefile脚本对整个项目的各个文件分别进行编译、链接,也可以把如何产生文档(如manual page,info档及dvi档)以及打包压缩都完成。

make和gcc相比:
1、gcc是编译一个文件,make是编译多个源文件的工程文件的工具
2、make可以说是一个批处理程序,它根据makefile脚本自动编译多个脚本,make是运用gcc去编译文件的。

makefile基本就是:目标(target)、关联(dependencies)和动作三者所组成的脚本。makefile文件是许多编译器,包括Windows NT下的编译器,维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改makefile文件而已。

makefile文件

makefile文件告诉make该做什么、怎么做
make工具会在当前目录下寻找名为“Makefile”或“makefile”的文件并解释执行其中的指令。

makefile主要包含了:

  1. 一系列规则(显示规则、隐式规则、模式规则)
  2. 变量定义
  3. 文件指示(指示包含其他makefile文件,或根据情况指定makefile文件中的有效部分)

规则:

一条规则包含3个方面的内容:
1. 要创建的目标(文件)
2. 创建目标(文件)所依赖的文件列表
3. 通过依赖文件创建目标文件的命令组

规则的一般形式:
target …:prerequisites …
< tab>command
< tab>…
< tab>…

备注:prerequisites:预备知识、先决条件;

举例说明:
test:test.c
gcc -o test test.c

规则包括:显式规则、隐式规则、模式规则
隐式规则,由make工具自动推导由依赖文件生成目标文件的规则
模式规则,由make工具根据模板自动推导由依赖文件生成目标文件的规则

变量:

变量可以指代一个长的字符串,使用变量可以降低错误风险、简化makefile。
变量分为:简单变量、递归变量、自动变量

举例说明:objects变量($(objects))

objects = main.o kbd.o command.o display.o \        insert.o search.o files.o utils.oedit: $(objects)        cc -o edit $(objects)

简单的Makefile:

OBJS = kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)    $(CC) $(OBJS) -o davidkang.o : kang.c kang.h    $(CC) $(CFLAGS) -c kang.c -o kang.oyul.o : yul.c yul.h    $(CC) $(CFLAGS) -c yul.c -o yul.o

有一个简单的makefile(自动变量):

OBJS = kang.o yul.oCC = gccCFLAGS = -Wall -O -gdavid : $(OBJS)    $(CC) $^ -o $@kang.o : kang.c kang.h    $(CC) $(CFLAGS) -c $< -o $@yul.o : yul.c yul.h    $(CC) $(CFLAGS) -c $< -o $@
0 0