make和Makefile的使用

来源:互联网 发布:新版本淘宝高级搜索 编辑:程序博客网 时间:2024/05/15 12:05

  make和Makefile的使用

make是一个Linux下的二进制程序,用来处理Makefile这种文本文件。在Linux的Shell命令行键入make的时候,将自动寻找名称为"Makefile"的文件作为编译文件,如果没有名称为"Makefile"的文件,将继续查找名称为"makefile"的文件。找到编译文件后,make工具将根据Makefile中的第一个目标自动寻找依赖关系,找出这个目标所需要的其他目标。如果所需要的目标也需要依赖其他的目标,make工具将一层层寻找直到找到最后一个目标为止。

make工具的使用格式为:

make [options] [target] ...

options为make工具的选项,target为Makefile中指定的目标。表5-1给出了make工具的参数选项。

表5-1  make工具的参数选项

选 项

含    义

-f filename

显式地指定文件作为Makefile

-C dirname

制定make在开始运行后的工作目录为dirname

-e

不允许在Makefile中替换环境变量的赋值

-k

执行命令出错时,放弃当前目标,继续维护其他目标

-n

按实际运行时的执行顺序模拟执行命令

(包括用@开头的命令),没有实际执行

效果,仅仅用于显示执行过程

-p

显示Makefile中所有的变量和内部规则

-r

忽略内部规则

-s

执行但不显示命令,常用来检查Makefile的正确性

-S

如果执行命令出错就退出

-t

修改每个目标文件的创建日期

-I

忽略运行make 中执行命令的错误

-V

显示make的版本号

在Makefile中,经常使用的变量如表5-2所示。

表5-2  Makefile中常用变量

变量

描    述

$@

目标文件名

$<

规则中的第一个文件名

$^

规则中所有相关文件的名称

$?

规则中日期比目标新的文件列表,用空格分开

$@(D)

目标文件的目录部分

$@(F)

目标文件的文件名部分

在Makefile中,目标名称的指定常常有以下惯例:

all:表示编译所有的内容,是执行make时默认的目标。

clean:表示清除目标。

distclean:表示清除所有的内容。

install:表示进行安装的内容。

 

本节的Makefile是一个简单的示例,它只用于显示信息,并不生成具体的目标。文件如下所示:

all:@echo "+++++++ make all +++++++"
rule0:@echo "Input = $(INPUT)"@echo 'This Target is $@'
.PHONY : cleanclean:@echo "------- clean ------"

在该文件中,每一条语句的@echo 'This Target is $@'的前面需要使用Tab键作为开头,这是Makefile书写的要求。

在命令行键入"make":

$ make+++++++ make all +++++++

执行的结果是Makefile文件中的all规则。注意,在文件命令行中使用@,表示不在命令行显示该程序的运行输出状态,对于没有使用@标注的命令,在执行make的时候,命令行的内容将显示在屏幕上。

使用clean:

$ make clean------- clean ------

此时,make工具根据Makefile中的clean目标执行相关的内容。

以上执行make和make clean是使用make工具的时候最常见的方式,make默认执行all目标,make clean表示清除目标。

对于Makefile中的其他目标,可以通过在命令行指定让其得到执行,如下所示:

$ make rule0Input =This Target is rule0

此时,明确指定执行rule0目标。由于使用的变量$(INPUT)没有初始值,因此打印出的内容为空。

在Makefile中,可以使用"变量=值"的方式,在命令行指定执行过程中变量的值。如下所示:

$ make rule0 INPUT=abcdeInput = abcdeThis Target is rule0
此时由于命令行指定了INPUT=abcde,因此在执行的过程中$(INPUT)变量的值为abcde,在执行echo时输出了这个值。由此,对于同一个Makefile文件,其执行的结果,可以根据命令行的参数进行选择,由此实现其可配置的特性。

本节的Makefile是一个简单的示例,它只用于显示信息,并不生成具体的目标。文件如下所示:

all:@echo "+++++++ make all +++++++"
rule0:@echo "Input = $(INPUT)"@echo 'This Target is $@'
.PHONY : cleanclean:@echo "------- clean ------"

在该文件中,每一条语句的@echo 'This Target is $@'的前面需要使用Tab键作为开头,这是Makefile书写的要求。

在命令行键入"make":

$ make+++++++ make all +++++++

执行的结果是Makefile文件中的all规则。注意,在文件命令行中使用@,表示不在命令行显示该程序的运行输出状态,对于没有使用@标注的命令,在执行make的时候,命令行的内容将显示在屏幕上。

使用clean:

$ make clean------- clean ------

此时,make工具根据Makefile中的clean目标执行相关的内容。

以上执行make和make clean是使用make工具的时候最常见的方式,make默认执行all目标,make clean表示清除目标。

对于Makefile中的其他目标,可以通过在命令行指定让其得到执行,如下所示:

$ make rule0Input =This Target is rule0

此时,明确指定执行rule0目标。由于使用的变量$(INPUT)没有初始值,因此打印出的内容为空。

在Makefile中,可以使用"变量=值"的方式,在命令行指定执行过程中变量的值。如下所示:

$ make rule0 INPUT=abcdeInput = abcdeThis Target is rule0
此时由于命令行指定了INPUT=abcde,因此在执行的过程中$(INPUT)变量的值为abcde,在执行echo时输出了这个值。由此,对于同一个Makefile文件,其执行的结果,可以根据命令行的参数进行选择,由此实现其可配置的特性。

 

 

原创粉丝点击