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。它们使得构建系统更易于维护,因为可以适应不同的源文件和目标。

相关文章
|
缓存 安全 SoC
来看看ARM gicv2/gicv3的详解
来看看ARM gicv2/gicv3的详解
1293 0
|
C语言
带你熟知关键字static用法——C语言(举例及通俗易懂)
带你熟知关键字static用法——C语言(举例及通俗易懂)
736 0
|
6月前
|
人工智能 安全 API
2025电商API新特性:实时数据流、GraphQL接口与隐私合规
2025年电商API迎来技术与合规双重革新,实时数据流、GraphQL接口、隐私合规成为核心突破方向,推动全息电商、动态定价、供应链协同等场景升级,实现性能优化与用户隐私保护的协同发展。
|
设计模式 前端开发 JavaScript
深入探索研究MVVM架构设计
【10月更文挑战第7天】
515 0
|
Python
Python中的and or not
Python中的and or not
848 1
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
539 4
ROS2教程05 ROS2服务
|
存储 人工智能 对象存储
一文详解阿里云AI大基建
一文详解阿里云AI大基建
2150 2
|
存储 弹性计算 安全
阿里云弹性计算_通用计算专场精华概览 | 2024云栖大会回顾
本次专场内容包括阿里云弹性计算全新发布的产品家族、阿里云第9代 ECS 企业级实例、CIPU 2.0技术解读、E-HPC+超算融合、倚天云原生算力解析等内容,并发布了国内首个云超算国家标准。
分享一些在 1688 上找一件代发商品的技巧
在1688上找一件代发商品需明确自身需求与定位,筛选可靠供应商,研究商品信息,利用精准搜索和平台推荐,关注活动,并与供应商充分沟通,确保合作顺畅。
|
Ubuntu Linux
在Linux中,如何配置静态IP地址?
在Linux中,如何配置静态IP地址?