Makefile语法基础

简介: Makefile语法基础

Makefile语法基础

Makefile 是一种用于构建和管理项目的工具,它使用一种类似于 Shell 脚本的语法。下面是一个简单的 Makefile 代码示例,涵盖了基础的语法和常见的构建规则:

# 定义变量
CC = gcc
CFLAGS = -Wall -O2
SRC_DIR = src
BUILD_DIR = build
TARGET = my_program
# 构建目标
$(BUILD_DIR)/$(TARGET): $(BUILD_DIR)/main.o $(BUILD_DIR)/foo.o $(BUILD_DIR)/bar.o
    $(CC) $^ -o $@
# 构建目标文件
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@
# 默认目标
all: $(BUILD_DIR)/$(TARGET)
# 清理操作
clean:
    rm -rf $(BUILD_DIR)/*.o $(BUILD_DIR)/$(TARGET)



1. 变量定义:
在上述示例中,使用了变量来存储编译器 (CC)、编译选项 (CFLAGS)、源代码目录 (SRC_DIR)、构建目录 (BUILD_DIR) 和目标可执行文件 (TARGET)。这样可以方便地修改和扩展项目的结构。
2. 构建目标规则:
$(BUILD_DIR)/$(TARGET): $(BUILD_DIR)/main.o $(BUILD_DIR)/foo.o $(BUILD_DIR)/bar.o 规则定义了如何生成最终的目标可执行文件。它依赖于目标文件 main.o、foo.o 和 bar.o,并通过链接命令将它们组合成可执行文件。
3. 构建目标文件规则:
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c 规则使用通配符 % 定义了如何生成目标目录中的目标文件。这个规则是一个模式规则,它告诉 Make 如何将源代码文件编译成目标文件。
4. 默认目标:
all: $(BUILD_DIR)/$(TARGET) 指定了默认目标,当用户运行 make 命令时,会执行该目标。在这个例子中,执行 all 相当于执行构建目标的规则。
5. 清理操作:
clean 目标定义了清理操作,以删除构建过程中生成的目标文件和可执行文件。这有助于确保下次构建时从一个干净的状态开始。
这个示例展示了一个简单的 Makefile,其中包括了变量、目标和规则的基本定义。通过这些基础概念,你可以构建更复杂的 Makefile,适应不同项目的需求。 Makefile 的强大之处在于它能够自动化项目构建过程,提高开发效率。

相关文章
|
消息中间件 架构师 Java
史上最细最强大的RocketMQ实现分布式事务解决方案教程|Java 开发实战(上)
史上最细最强大的RocketMQ实现分布式事务解决方案教程|Java 开发实战
978 0
史上最细最强大的RocketMQ实现分布式事务解决方案教程|Java 开发实战(上)
|
9月前
|
人工智能 供应链 数据可视化
新一代信息技术助力企业数字化转型
本文深入探讨了企业数字化转型的内涵、重要性及其实现路径,强调了数字化转型不仅是技术革新,更是企业全方位的升级。文章分析了转型过程中面临的挑战与机遇,并介绍了板栗看板如何作为高效的项目管理工具,助力企业优化流程、提升效率,推动数字化转型的成功实施。
362 11
|
12月前
|
人工智能 前端开发 云计算
本地搭建AI服务器
本地搭建AI服务器
1002 1
|
11月前
|
前端开发 JavaScript
使用 JavaScript 实现图片预览功能
使用 JavaScript 实现图片预览功能
285 0
|
设计模式 安全 API
软件体系结构 - 架构风格(5)层次结构架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(5)层次结构架构风格
1123 0
|
JavaScript 前端开发 开发工具
npm更新和管理已发布的包
npm更新和管理已发布的包
|
关系型数据库 MySQL 测试技术
软件测试|MySQL BETWEEN AND:范围查询详解
软件测试|MySQL BETWEEN AND:范围查询详解
|
存储 Ubuntu Linux
Ubuntu桌面美化教程(GNOME Tweak Tool安装教程)
Ubuntu桌面美化教程(GNOME Tweak Tool安装教程)
2807 0
Ubuntu桌面美化教程(GNOME Tweak Tool安装教程)
|
前端开发 JavaScript 开发者
【chatgpt谈前端三大主流框架】React、Vue和Angular的优缺点及如何选择
chatgpt号称无所不能,今天我们就来考考他,让他来对比下React、Vue和Angular。
474 0