Makefile模式规则与自动变量

简介: Makefile模式规则与自动变量

Makefile模式规则与自动变量

在Makefile中,模式规则和自动变量是强大的工具,它们使得编写灵活和通用的构建规则更为容易。下面下面让我举一些关于模式规则和自动变量的代码示例:

1. 模式规则示例:

假设我们有一组源文件,它们的扩展名是.c,我们想要编译它们生成相应的目标文件。可以使用模式规则来实现:

# 模式规则

%.o: %.c

   gcc -c $< -o $@

 

# 构建目标

all: file1.o file2.o file3.o

 

# 默认规则

file1.o: file1.c

file2.o: file2.c

file3.o: file3.c

 

在这个例子中,%.o: %.c 定义了一个模式规则,它告诉Makefile如何生成目标文件(.o)从对应的源文件(.c)。通过这个规则,可以使用自动变量 $< 表示规则的第一个依赖(源文件),$@ 表示规则的目标(目标文件)。在 all 目标中列出需要构建的目标文件,Makefile 会自动使用模式规则进行编译。

2. 自动变量示例:

自动变量是Makefile提供的用于表示规则中特定部分的变量,它们会根据上下文自动被赋值。例如:

# 模式规则

%.o: %.c

   gcc -c $< -o $@

 

# 构建目标

all: file1.o file2.o file3.o

 

# 默认规则

file1.o: file1.c

file2.o: file2.c

file3.o: file3.c

 

# 清理规则

clean:

   rm -f *.o

 

在这个例子中,$< 表示规则的第一个依赖(源文件),$@ 表示规则的目标(目标文件)。在 clean 规则中,我们使用了自动变量 *.o 表示所有的目标文件。当运行 make clean 时,Makefile 将删除所有生成的目标文件。

3. 模式规则和自动变量的结合:

# 模式规则
%.o: %.c
    gcc -c $< -o $@
 
# 构建目标
all: file1.o file2.o file3.o
 
# 默认规则
file1.o: file1.c
file2.o: file2.c
file3.o: file3.c
 
# 可执行文件规则
my_program: file1.o file2.o file3.o
    gcc $^ -o $@
 
# 清理规则
clean:
    rm -f *.o my_program

 

在这个例子中,我们使用了模式规则来编译源文件为目标文件,并在 my_program 规则中使用了自动变量 $^ 表示所有的依赖文件(目标文件),$@ 表示规则的目标(可执行文件)。这样,当需要生成可执行文件时,Makefile 会自动根据模式规则生成目标文件,然后链接它们生成可执行文件。

这些示例演示了如何使用模式规则和自动变量创建更灵活和通用的Makefile。它们使得构建系统更易于维护,因为可以适应不同的源文件和目标。

相关文章
|
芯片 异构计算 内存技术
关于SPI协议,看这一篇文章就够了!
关于SPI协议,看这一篇文章就够了!
1238 0
关于SPI协议,看这一篇文章就够了!
|
3月前
|
人工智能 安全 API
2025电商API新特性:实时数据流、GraphQL接口与隐私合规
2025年电商API迎来技术与合规双重革新,实时数据流、GraphQL接口、隐私合规成为核心突破方向,推动全息电商、动态定价、供应链协同等场景升级,实现性能优化与用户隐私保护的协同发展。
|
12月前
|
设计模式 前端开发 JavaScript
深入探索研究MVVM架构设计
【10月更文挑战第7天】
298 0
|
Shell Linux 编译器
Linux Makefile 全面教程:使用 Makefile 进行项目管理和构建
Linux Makefile 全面教程:使用 Makefile 进行项目管理和构建
1523 0
|
Python
Python中的and or not
Python中的and or not
540 1
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
418 4
ROS2教程05 ROS2服务
|
缓存 JavaScript API
NodeJS代理配置指南:详细步骤和代码示例
**Node.js 代理配置:解决HTTP请求转发与CORS挑战** 在现代开发环境中,Node.js以其高效和灵活性深受青睐,但正确配置代理以处理跨域请求和API调用仍是复杂任务。本文提供全面指南,从基础到高级设置,教授如何在Node.js中使用代理,覆盖httpOptions、npm代理及第三方库的运用,以增强API调用灵活性。
1155 23
NodeJS代理配置指南:详细步骤和代码示例
分享一些在 1688 上找一件代发商品的技巧
在1688上找一件代发商品需明确自身需求与定位,筛选可靠供应商,研究商品信息,利用精准搜索和平台推荐,关注活动,并与供应商充分沟通,确保合作顺畅。
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的脑肿瘤智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、智慧医疗(1)
基于YOLOv8深度学习的脑肿瘤智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、智慧医疗
|
机器学习/深度学习 算法 计算机视觉
【美团技术】基于多模态信息抽取的菜品知识图谱构建
【美团技术】基于多模态信息抽取的菜品知识图谱构建