Makefile函数的使用(1)

简介: Makefile函数的使用(1)

Makefile函数的使用

Makefile 是一个用于自动化编译程序的工具,它允许用户定义一系列规则以描述文件之间的依赖关系,并指定如何生成目标文件。Makefile 中的函数可以帮助用户在规则中执行各种操作,例如文件操作、字符串处理等。下面是几个常用的 Makefile 函数及其使用示例:

1. $(shell ...)

该函数用于在 Makefile 中执行 shell 命令,并返回其输出结果。

# 示例:获取当前时间并赋值给变量

CURRENT_TIME := $(shell date)

 

# 示例:列出当前目录下的所有文件

FILES := $(shell ls)

 

2. $(wildcard ...)

该函数用于匹配文件名模式,并返回匹配的文件列表。

# 示例:获取当前目录下所有的 .c 文件

C_FILES := $(wildcard *.c)

 

# 示例:获取当前目录及其子目录下所有的 .h 文件

H_FILES := $(wildcard *.h */*.h)

 

3. $(foreach ..., ..., ...)

该函数用于迭代处理列表中的每个元素。

# 示例:打印列表中的每个文件名

FILES := file1.c file2.c file3.c

$(foreach file,$(FILES),$(info $(file)))

 

4. $(subst ..., ..., ...)

该函数用于替换字符串中的子字符串。

# 示例:将文件名中的 .c 替换为 .o

OBJ_FILES := $(subst .c,.o,$(C_FILES))

 

5. $(addprefix ..., ...)

该函数用于给列表中的每个元素添加前缀。

# 示例:给所有 .c 文件添加路径前缀

SRC_FILES := file1.c file2.c file3.c

ALL_FILES := $(addprefix src/,$(SRC_FILES))

 

6. $(addsuffix ..., ...)

该函数用于给列表中的每个元素添加后缀。

# 示例:给所有文件添加 .obj 后缀

OBJ_FILES := $(addsuffix .obj,$(FILES))

 

7. $(if ..., ..., ...)

该函数用于条件判断。

# 示例:根据条件编译不同的代码

DEBUG := 1

ifeq ($(DEBUG),1)

   CFLAGS := -g

else

   CFLAGS := -O2

endif

 

这些示例展示了 Makefile 函数的一些常见用法,可以帮助用户更灵活地管理和处理文件、变量等内容。通过结合这些函数,可以构建出更复杂、更灵活的 Makefile 规则,以满足各种编译和构建需求。

相关文章
|
传感器 算法
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
1336 0
|
移动开发 vr&ar
数据库系统概论——关系代数详解
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是利用对关系的运算来表达查询的。任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。关系代数的运算对象是关系,运算结果亦为关系。集合运算符将关系看成元组的集合从关系的“水平”方向即行的角度来进行运算专门的关系运算符不仅涉及行而且涉及列算术比较符辅助专门的关系运算符进行操作逻辑运算符辅助专门的关系运算符进行操作。
1901 1
数据库系统概论——关系代数详解
|
11月前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
735 20
|
Linux 开发工具 git
【Git】Git 完全指南:从入门到精通
Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。
4299 4
|
开发工具 git 开发者
解决fatal: not a git repository (or any of the parent directories): .git问题
解决fatal: not a git repository (or any of the parent directories): .git问题
2741 1
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
306 4
|
编解码 前端开发 JavaScript
非科班出身的人想要顺利地转型成为编程领域的专业人士的建议
@[TOC](目录) 非科班想要丝滑转码,可以参考下述步骤: # 1、具体方法 1. 了解想要从事的领域:比如前端开发、数据分析、产品经理等。通过互联网进行调查,了解这些领域的职责、技能需求、发展前景等。 2. 学习基础知识:了解领域后,可以通过互联网、在线课程、书籍等途径学习基础知识。例如,如果想成为前端开发者,需要了解 HTML、CSS 和 JavaScript 等编程语言,掌握前端框架 (如 React、Angular 和 Vue 等) 和版本控制工具 (如 Git 等) 的基本使用。 3. 实践项目:掌握基础知识后,可以尝试实践项目,巩固所学知识并提高技能。例如,可以构建一个
353 0
|
运维 网络协议 Unix
Linux终端(Terminal)与控制台(Console)的区别
Linux终端(Terminal)与控制台(Console)的区别
1091 0
|
缓存 监控 算法
|
Rust 数据安全/隐私保护 Android开发
Star 50.3k!超棒的国产远程桌面开源应用火了!
Star 50.3k!超棒的国产远程桌面开源应用火了!
655 0
Star 50.3k!超棒的国产远程桌面开源应用火了!