make和Makefile的使用

  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 : clean
clean:
@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 rule0
Input =
This Target is rule0

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

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

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

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

all:
@echo "+++++++ make all +++++++"
rule0:
@echo "Input = $(INPUT)"
@echo 'This Target is $@'
.PHONY : clean
clean:
@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 rule0
Input =
This Target is rule0

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

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

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

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值