Makefile语法

Makefile语法

因为 Make 在执行的过程中会自动输出命令执行过程,在命令前面加上“@”的话就不会输出命令执行过程

1 Makefile 规则格式
Makefile 里面是由一系列的规则组成的,这些规则格式如下:

目标…... : 依赖文件集合……
	命令 1
	命令 2
……

比如下面这条规则:

main : main.o input.o calcu.o
	 gcc -o main main.o input.o calcu.o

命令列表中的每条命令必须以 TAB 键开始,不能使用空格!

示例:

main: main.o input.o calcu.o
	gcc -o main main.o input.o calcu.o
main.o: main.c
	gcc -c main.c
input.o: input.c
	gcc -c input.c
calcu.o: calcu.c
	gcc -c calcu.c

clean:
	rm *.o
	rm main

2 Makefile 变量
Makefile 中的变量都是字符串!类似 C 语言中的宏。
跟 C 语言一样 Makefile 也支持变量的,先看一下前面的例子:

main: main.o input.o calcu.o
	gcc -o main main.o input.o calcu.o

应用Makefile 变量:

#Makefile 变量的使用
objects = main.o input.o calcu.o
main: $(objects)
	gcc -o main $(objects)

3 赋值符
(1)赋值符“=”
使用“=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值。是变量的真实值取决于它所引用的变量的最后一次有效值。
(2)赋值符“:=”
赋值符“:=”不会使用后面定义的变量,只能使用前面已经定义好的。即“恒等于
(3)赋值符“?=”
前面已经赋过值了,那么就使用前面赋的值。否则赋予当前值
(4)变量追加“+=”
Makefile 中的变量是字符串,有时候我们需要给前面已经定义好的变量添加一些字符串进
,此时就要使用到符号“+=”

4 Makefile 模式规则
%类似于通配符
模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%”
表示对文件名的匹配,“%”表示长度任意的非空字符串

如:目标和依赖都是一系列的文件,每一次对模式规则进行解析的时候
都会是不同的目标和依赖文件

%.o : %.c:
	#命令

5 Makefile 自动化变量
在这里插入图片描述
常用的三种: @ 、 @、 @<和 ( 1 ) ^ (1) 1@:规则中的目标集合,在模式规则中,如果有多个目标的话,“ @ ” 表 示 ∗ ∗ 匹 配 模 式 中 定 义 的 目 标 集 合 。 ∗ ∗ ( 2 ) @”表示**匹配模式中定义的目标集合。** (2) @2<:依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么“ < ” 就 是 符 合 模 式 的 一 系 列 的 文 件 集 合 。 ( 3 ) <”就是符合模式的一系列的文件集合。 (3) <3^:所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,会去除重复的依赖文件,只保留一份。

6 Makefile 伪目标
目标没有依赖,只有规则
有时候我们需要编写一个规则用来执行一些命令,但是这个规则不是用来创建文件的。
如:

clean:
	rm *.o
	rm main

7 Makefile 条件判断
条件关键字有 4 个:ifeq、ifneq、ifdef 和 ifndef,这四个关键字其实分为两对:
ifeq 与ifneq;ifdef 与 ifndef。
ifeq 用来判断是否相等,ifneq 就是判断是否不相等。
(1)ifeq 用法如下:

```
ifeq (<参数 1>, <参数 2>)
ifeq ‘<参数 1 >’,‘ <参数 2>’
ifeq “<参数 1>”, “<参数 2>”
ifeq “<参数 1>”, ‘<参数 2>’
ifeq ‘<参数 1>’, “<参数 2>”
ifneq 的用法类似,只不过 ifneq 是用来了比较“参数 1”和“参数 2”是否不相等。

	(2)ifdef 和 ifndef 的用法如下:
	
	```
	ifdef <变量名>
	```
	如果“变量名”的值非空,那么表示表达式为真,否则表达式为假。“变量名”同样可以是一个函数的返回值。
	ifndef 用法类似,但是含义用户 ifdef 相反。

**8 Makefile 函数使用**


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值