Makefile基础教程(变量的介绍和使用)


前言

在C语言等语言中存在变量这个概念那么在Makefile中也是存在变量这个概念的,现在就让我们来学习一下什么是Makefile中的变量。

一、Makefile变量概念介绍

变量是在Makefile中被定义并被赋予特定的值或字符串,这些变量可以在整个Makefile中引用和使用。

在Makefile中定义变量,可以使Makefile更加灵活,便于维护和重复使用代码。变量通常用于存储文件名、目录路径、编译器选项等常用的定义,并且可以动态地用于自动构建步骤的指令中。

以下是一些Makefile变量的示例:

CC变量:用于指定编译器的类型
CC = gcc

CFLAGS变量:指定编译器选项(例如调试信息、优化等)
CFLAGS = -g -O2

SRC_FILES变量:用于指定源文件列表
SRC_FILES = main.c foo.c bar.c

OBJ_FILES变量:用于指定目标文件列表

二、Makefile中变量的赋值方式

1.简单赋值

简单赋值其实就是和我们在C语言当中使用 = 来赋值是一样的。
当我们要调用这个变量的使用可以使用$符号进行调用。

x := "hello"

all : 
	@echo "x => $x"

执行结果:
在这里插入图片描述

2.递归赋值

当使用递归赋值时其中一个变量的值被修改那么这个被赋值的值也会随之被修改。

x := hello
y = $(x)world
x := hi

all : 
	@echo "x => $(x)"
	@echo "y => $(y)"

执行结果:
在这里插入图片描述

3.条件赋值

条件赋值就是当一个变量没有进行定义时才能起作用。

x := hello
y = $(x)world
x := hi
z = test1
z ?= test

all : 
	@echo "x => $(x)"
	@echo "y => $(y)"
	@echo "z => $(z)"

执行结果:
在这里插入图片描述

4.追加赋值

追加赋值其实是非常好理解的,就是在原来变量的后面再加上赋的值,但是需要注意的就是追加的值和原来的值之间是会有一个空格隔开的。

x := hello
y = $(x)world
x := hi
z = test1
z ?= test
k := test11
k += Test

all : 
	@echo "x => $(x)"
	@echo "y => $(y)"
	@echo "z => $(z)"
	@echo "k => $(k)"

三、Makefile赋值在工程中的应用

这里我们使用赋值来改造一下我们之前写过的一个makefile,在这里使用了CC替代gcc,使用TARGET替代 hello。
当我们的编译器不是使用的gcc时我们只需要修改CC 这个变量的值即可,当要生成目标的文件名不是hello时修改TARGET变量的值即可。

CC := gcc
TARGET := hello

TARGET : hello.o func.o
	$(CC) -o TARGET hello.o func.o

hello.o : hello.c
	$(CC) -c -o hello.o hello.c

func.o : func.c
	$(CC) -c -o func.o func.c

.PHONY: clean rebuild all

rebuild : clean all

all : TARGET

clean :
	rm *.o TARGET

总结

Makefile中的变量在工程开发中是非常常用的,大家需要好好掌握和理解。

以下是关于 Makefile 中变量的总结:

定义变量:

使用 = 或 := 运算符将值赋给变量。
通常将变量定义在 Makefile 的顶部,以便容易查找和修改。
引用变量:

使用 $( 和 ) 或 ${ 和 } 来引用变量的值。
例如,使用 $(VAR) 或 ${VAR} 引用变量 VAR。
预定义变量:

Makefile 提供了一些预定义的特殊变量,可以在构建过程中使用。
例如, @ 表示目标名, @ 表示目标名, @表示目标名,^ 表示所有依赖文件列表。
自动化变量:

Makefile 还提供了一些特殊的自动化变量,用于表示特定的构建相关信息。
例如, @ 表示当前目标文件名, @ 表示当前目标文件名, @表示当前目标文件名,< 表示第一个依赖文件名。
变量的扩展:

可以通过在变量名前添加 $ 或 {} 来对变量进行扩展。
例如,$(VAR_SUFFIX) 或 ${VAR}_SUFFIX 进行变量名的扩展。
变量的修改和操作:

可以对变量进行字符串操作,例如添加前缀或后缀,截取子串等。
使用内置的字符串操作函数,如 $(subst from,to,text)。
默认变量值:

可以为变量提供默认值,以便在未定义时使用。
使用符号 `?=`` 来定义默认值。
环境变量:

Makefile 可以使用系统环境变量,并将其赋值给 Makefile 中的变量。
使用 $(VAR) := $(ENV_VAR) 进行赋值。
通过合理利用变量,可以使得 Makefile 更具可维护性和灵活性。您可以根据不同的需求来定义、操作和引用变量,以便在构建过程中进行自定义配置和参数传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落已飘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值