Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Makefile中的字符串替换

Makefile中的字符串替换

作者头像
mingjie
发布于 2023-10-13 02:28:19
发布于 2023-10-13 02:28:19
71800
代码可运行
举报
运行总次数:0
代码可运行

Makefile中的字符串替换,做下验证和总结。

案例:Makefile Tutotial中一段代码

Makefile Tutotial最后给出了一段makefile,里面OBJS有字符串通配、替换的过程:

Makefile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SRC_DIRS := ./src
BUILD_DIR := ./build

SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)

TAR:
    @echo SRCS : $(SRCS)
    @echo OBJS : $(OBJS)

执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
touch aa123zz.c
touch aa332dzz.cpp
touch aa44325drzz.cpp
make

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./build/./aa123zz.c.o ./build/./aa44325drzz.cpp.o ./build/./aa332dzz.cpp.o

(BUILD_DIR)/%.o)如何匹配的还是比较困惑,下面做一些实验和总结。

Makefile字符串替换规则

场景一:整体匹配替换

Makefile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SRCS := ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS := $(SRCS:.cpp=.cxx)

TAR:
    @echo SRCS : $(SRCS)
    @echo OBJS : $(OBJS)

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./aa123zz.c ./aa44325drzz.cxx ./aa332dzz.cxx

规则:注意字符串中的空格起到分隔作用,分隔的每一个字符串都会应用下面规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(变量名:旧值=新值)

场景二:通配符替换

Makefile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SRCS := ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS := $(SRCS:./aa%zz.cpp=./AA%%ZZ.cxx)

TAR:
	@echo SRCS : $(SRCS)
	@echo OBJS : $(OBJS)

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make
SRCS : ./aa123zz.c ./aa44325drzz.cpp ./aa332dzz.cpp
OBJS : ./aa123zz.c ./AA44325dr%ZZ.cxx ./AA332d%ZZ.cxx

规则:注意带通配符的话,旧值必须整体匹配,匹配一部分不行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(变量名:旧值带通配符)=新值带不带通配符都行通配符代表旧值中匹配的字符)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【嵌入式单元测试】C语言单元测试框架搭建
单元测试框架是一个软件包,它能够让开发者比较方便的表达产品代码需要表现出什么样的行为。单元测试框架提供了一个自动化单元测试的解决方案,让开发者把更多的精力放在测试用例的设计的编写上,而不用花精力考虑如何对测试用例进行组织。
知否知否应是绿肥红瘦
2025/02/19
1640
【嵌入式单元测试】C语言单元测试框架搭建
Makefile常用模板「建议收藏」
做开发的特别是C/C++开发者一般都会用到Makefile,然而多数时候在公司做项目都不需要自己去写Makefile,仅仅停留在能看懂的基础上。因为make命令编译实在是太方便了,所以自己写写小项目用一用还是挺好的。网上关于Makefile教程也很多,总结一下近几年用到的常用脚本,方便自己查阅,如果能帮到别人那便是极好的_。
全栈程序员站长
2022/09/02
1.4K0
Linux笔记(9)| 一步步深入Makefile
今天分享的是如何一步步深入地学习Makefile。在Linux中编译代码,不像是Windows中有很多集成的IDE,Linux中都是通过基本的编译工具如gcc来进行,比如要编译main.c这个文件,可以使用gcc main.c -o main.但是如果源文件很多,这种方法就不适用了,所以,必须要学会使用Makefile。
飞哥
2020/07/10
9270
Linux笔记(9)| 一步步深入Makefile
makefile文件编写「建议收藏」
makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明:
全栈程序员站长
2022/09/06
3.3K0
makefile文件编写「建议收藏」
一步步写属于自己的makefile
本文将自己常用的一个makefile一步步按照解决需求的思路,逐步深入。并没有枯燥地讲解makefile的基础,而是在涉及的地方进行说明。这样,在解决问题的兴奋中,逐渐也掌握了makefile编写的真谛。希望对大家有帮助。
Tupelo
2022/08/15
6600
Makefile 的使用
在 Linux 中使用 make 命令来编译程序,特别是大程序;而 make 命令所执行的动作依赖于 Makefile 文件。最简单的 Makefile 文件如下:
韦东山
2020/10/30
4.4K1
Makefile 的使用
Makefile 使用总结
http://www.cnblogs.com/wang_yb/p/3990952.html
bear_fish
2018/09/20
3.7K0
图解嵌入式系统开发之Makefile篇
很多人学习嵌入式开发首先遇到的问题肯定是我的代码写在哪里?如何让我写的代码编译进系统 ?如果你是在培训班学习,老师肯定会告诉你先不要管他怎么编译进系统,你只需要在代码所在目录下的Makefile中添加上你的代码文件的名字(后缀.c改成.o)就行了。如下:
用户5759494
2019/07/05
1.3K0
图解嵌入式系统开发之Makefile篇
Makefile从入门到上手
makefile 关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
Gnep@97
2023/08/15
4110
Makefile从入门到上手
Makefile入门
Makefile是一种用于自动化构建程序的工具,它提供了一系列规则来指定源代码文件之间的依赖关系,以及如何生成目标文件。通过使用Makefile,程序员可以有效地管理和组织软件项目的编译过程,从而提高开发效率。
章工运维
2024/02/21
1630
Linux 开发 | 学习 Makefile
Make 是控制工程中通过源码生成可执行文件和其他相关文件的工具。Make 通过 Makefile 获取如何编译、链接和安装清理工程的信息。
orientlu
2018/09/13
5.5K0
Makefile教程
Makefile定义了软件开发过程中,项目工程编译链、链接的方法和规则。 由IDE自动生成或者开发者手动书写。 Unix(MAC OS、Solaris)和Linux(Red Hat、Ubuntu、SUSE)系统下由make命令调用当前目录下的Makefile文件,实现项目工程的自动化编译。
恋喵大鲤鱼
2018/08/03
4.1K0
makefile终极奥义
或许很多Winodws 的程序员都不知道这个东西,因为那些 Windows 的 IDE 都为你做了这个工作,但是一个好的和 professional 的程序员, makefile 还是要懂。这就好像现在有这么多的 HTML 的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML 的标识的含义。特别在 Unix 下的软件编译,你就不能不自己写 makefile 了,「会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力」。因为 makefile 关系到了整个工程的编译规则。
DeROy
2021/02/05
1.3K0
Makefile学习2
使用条件判断,可以让make在编译程序时,根据不同的情况,执行不同的分支:可以执行不同的命令,使用不同的编译参数,生成不同的目标。
用户9645905
2023/10/17
3540
cmake快速入门「建议收藏」
cmake是kitware公司以及一些开源开发者在开发几个工具套件(VTK)的过程中所产生的衍生品。后来经过发展,最终形成体系,在2001年成为一个独立的开放源代码项目。其官方网站是www.cmake.org,可以通过访问官方网站来获得更多关于cmake的信息,而且目前官方的英文文档比以前有了很大的改进,可以作为实践中的参考手册。
全栈程序员站长
2022/09/13
1.2K0
cmake快速入门「建议收藏」
Makefile经典教程(掌握这些足够)
makefile很重要       什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
bear_fish
2018/09/20
2.8K0
Linux中Makefile文件详解
Makefile 是一个用于构建和管理项目的工具,特别适用于 C/C++ 项目。它定义了项目中各个文件之间的依赖关系,并指定了如何编译和链接这些文件。以下是一个简单的 Makefile 文件的示例,以及对其中关键部分的详细解释:
Linux兵工厂
2024/02/17
1.1K0
Linux中Makefile文件详解
Nginx编译配置脚本篇(10)- Makefile相关脚本[通俗易懂]
由于学习本文需要Nginx源码及搭建相关的编译环境,且本文与前面的文章有先后呼应关系,所以建议大家按以下文章顺序阅读
全栈程序员站长
2022/09/05
2.4K0
深度刨析makefile
我们在 Windows 下开发,或者初学 Linux 的时候,可能几乎没有接触过 makefile ,甚至都不知道 makefile 是什么,这是因为在 Windows 下各种各样的集成开发工具,已经内置做好了 makefile 的工作,而初学 Linux 时编译一两个源文件似乎也用不到 makefile ,只要 gcc 一下就好了。而实际上,在 Linux 下的大型项目开发中,必须要用到 makefile ,会写 makefile 是Linux/Unix 程序员的必备技能之一,而且即便是 WIndows 程序员也应该掌握 makefile ,makefile 的编写能力一定程度上反映了一个程序员处理大型工程的能力。接下来,本文将带你走进 makefile 的世界,一起来探索 makefile 的语法规则以及工作原理,并通过实战演练来编写我们自己的 makefile 文件。
mindtechnist
2024/08/08
1730
深度刨析makefile
Make 快速入门
make 是 linux 系统的实用程序。它用于管理对于大型程序的自动编译任务,自动决定程序某一部分需要重新编译,并发出编译指令。虽然,我们最常见于 C 语言程序的编译。但是,make 不限于某一特定语言,凡是可以通过 shell 命令来运行编译器的语言都可以使用 make 。除此之外,你甚至可以用 make 描述任何构建任务,这些任务中,文件需要在其依赖的文件发生变动后自动更新。
我是一条小青蛇
2019/10/23
1.6K0
相关推荐
【嵌入式单元测试】C语言单元测试框架搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验