Makefile变量的引用与赋值

简介: Makefile变量的引用与赋值

Makefile变量的引用与赋值

在Makefile中,变量的引用和赋值是非常常见和重要的概念,它们使得Makefile更加灵活和可维护。下面是一些关于变量引用和赋值的代码示例,以便大家更好地理解它们的用法:

1. 变量赋值示例:

# 定义变量

CC = gcc

CFLAGS = -Wall -O2

 

# 使用变量

all:

   $(CC) $(CFLAGS) main.c -o my_program

 

在这个例子中,CC 和 CFLAGS 是两个变量,分别存储了编译器和编译选项。通过在Makefile中赋值这些变量,可以在整个Makefile中引用它们来执行编译操作。这使得在编译过程中更容易进行修改和维护,例如更改编译器或添加编译选项。

2. 变量引用示例:

# 定义变量

SRCS = main.c foo.c bar.c

OBJS = $(SRCS:.c=.o)

 

# 使用变量

all: $(OBJS)

   gcc $^ -o my_program

 

# 默认规则

%.o: %.c

   gcc -c $< -o $@

 

在这个例子中,SRCS 变量存储了所有的源文件,OBJS 变量使用了替换(substitution)功能,将所有的.c文件替换成了.o文件,用于构建目标文件列表。通过使用 $(OBJS),我们可以在 all 目标中引用它来构建最终的可执行文件。这种方式使得Makefile更加灵活,因为只需在一个地方定义源文件列表,即可自动生成目标文件列表。

3. 高级变量赋值和引用示例:

# 条件变量赋值

DEBUG ?= 0

ifeq ($(DEBUG), 1)

   CFLAGS += -g

endif

 

# 变量引用

LIBS = -lm

all: $(OBJS)

   gcc $^ $(LIBS) -o my_program

 

在这个例子中,DEBUG 变量是一个条件变量,它可以在命令行上进行覆盖赋值。如果没有指定,则默认为0。根据 DEBUG 变量的值,我们可以动态地向 CFLAGS 变量中添加 -g 选项以进行调试。另外,LIBS 变量存储了需要链接的库列表,通过将其引用添加到链接命令中,可以使得Makefile更加灵活地进行链接操作。

通过这些示例,可以看到变量的引用和赋值在Makefile中的重要性和灵活性。它们使得Makefile更易于维护和扩展,因为可以将常用的值存储在变量中,并在整个Makefile中重复使用。

相关文章
|
移动开发 Ubuntu 网络协议
Linux(11)Debain 调试EC25-EUX总记录
Linux(11)Debain 调试EC25-EUX总记录
470 0
makefile include 使用介绍
makefile include 使用介绍
269 0
|
10月前
|
Linux 程序员 开发工具
OpenHarmony开发板环境搭建
本文详细介绍如何在Windows、Linux搭建OpenHarmony开发环境,包括安装VSCode、DevEco Device Tool及相关插件,帮助开发者快速上手OpenHarmony开发。君志所向,一往无前!
353 65
|
7月前
|
存储 算法 数据挖掘
数据无罪,使用有度:从技术人角度谈数据伦理
数据无罪,使用有度:从技术人角度谈数据伦理
359 9
|
虚拟化 Docker Windows
Docker 和 vmware 共存工作
Docker 和 vmware 共存工作
420 9
|
12月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
1215 2
C/C++静态链接pthread库的坑【-static -pthread】
C/C++静态链接pthread库的坑【-static -pthread】
|
XML 存储 网络协议
/etc/netplan/network-manager-all.yaml 配置服务器ip
/etc/netplan/network-manager-all.yaml 配置服务器ip
452 0
|
缓存 算法 Linux
深入理解Linux动态库加载:路径、问题与解决方案
深入理解Linux动态库加载:路径、问题与解决方案
3377 0
|
存储 算法 关系型数据库
TDengine 3.3.0.0 发布:图形化管理工具、复合主键等10+ 功能更新
在涛思数据研发团队的努力下,TDengine 3.3.0.0 版本终于和大家见面了。这一版本中,我们引入了多项革新功能和性能优化,力求在为用户提供极致体验的同时,不断推动技术的前沿。
273 0