Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >makefile中的include的作用(makefile中的变量)

makefile中的include的作用(makefile中的变量)

作者头像
全栈程序员站长
发布于 2022-08-02 00:34:26
发布于 2022-08-02 00:34:26
3.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

1、wildcard : 扩展通配符

2、notdir : 去除路径

3、patsubst :替换通配符

例子: 建立一个测试目录,在测试目录下建立一个名为sub的子目录 $ mkdir test $ cd test $ mkdir sub 在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件 建立一个简单的Makefile src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) all: @echo $(src) @echo $(dir) @echo $(obj) @echo “end” 执行结果分析: 第一行输出: a.c b.c ./sub/sa.c ./sub/sb.c wildcard把 指定目录 ./ 和 ./sub/ 下的所有后缀是c的文件全部展开。 第二行输出: a.c b.c sa.c sb.c notdir把展开的文件去除掉路径信息 第三行输出: a.o b.o sa.o sb.o 在$(patsubst %.c,%.o,$(dir) )中,patsubst把$(dir)中的变量符合后缀是.c的全部替换成.o, 任何输出。 或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样的。 这里用到makefile里的替换引用规则,即用您指定的变量替换另一个变量。 它的标准格式是 $(var:a=b) 或 ${var:a=b} 它的含义是把变量var中的每一个值结尾用b替换掉a 今天在研究makefile时在网上看到一篇文章,介绍了使用函数wildcard得到指定目录下所有的C语言源程序文件名的方法,这下好了,不用手工一个一个指定需要编译的.c文件了,方法如下: SRC = $(wildcard *.c) 等于指定编译当前目录下所有.c文件,如果还有子目录,比如子目录为inc,则再增加一个wildcard函数,象这样: SRC = $(wildcard *.c) $(wildcard inc/*.c) 也可以指定汇编源程序: ASRC = $(wildcard *.S) 这样一来,makefile模板可修改的基本就是AVR名称和时钟频率了,其它的一般不用动了。

PS:针对patsubst我们来好好聊一聊

这是个模式替换函数

格式:$(patsubst <pattern>,<replacement>,<text> ) 名称:模式字符串替换函数——patsubst。 功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”,表示任意长度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“\”来转义,以“\%”来表示真实含义的“%”字符) 返回:函数返回被替换过后的字符串。

示例:

$(patsubst %.c,%.o,x.c.c bar.c)

把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”

make中有个变量替换引用

对于一个已经定义的变量,可以使用“替换引用”将其值中的后缀字符(串)使用指定的字符(字符串)替换。格式为“{VAR:A=B}”),意思是,替换变量“VAR”中所有“A”字符结尾的字为“B”结尾的字。“结尾”的含义是空格之前(变量值多个字之间使用空格分开)。而对于变量其它部分的“A”字符不进行替换。例如:

foo := a.o b.o c.o

bar := $(foo:.o=.c)

在这个定义中,变量“bar”的值就为“a.c b.c c.c”。使用变量的替换引用将变量“foo”以空格分开的值中的所有的字的尾字符“o”替换为“c”,其他部分不变。如果在变量“foo”中如果存在“o.o”时,那么变量“bar”的值为“a.c b.c c.c o.c”而不是“a.c b.c c.c c.c”。

它是patsubst的一个简化,那么到底是简化成了什么样子呢

CROSS=

CC=$(CROSS)gcc

CFLAGS= -Wall

LDFLAGS=

PKG = src

SRCS = (PKG)/inc/*.c) (PKG)/*.c)

BOJS = (SRCS))

#BOJS = $(SRCS: .c = .o)

#%.o:%.c

# < @

.PHONY:main

main:$(BOJS)

-@ ^

-mv main ./myfile

起初使用的是变量替换引用的方式,但是却始终不生成中间的.o文件,但是使用patsubst后,一切正常了,如果你知道为什么,请留言告诉我吧

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125625.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战119: 杨辉三角 II
https://leetcode-cn.com/problems/pascals-triangle-ii/
程序员小猿
2021/01/19
2060
​LeetCode刷题实战119: 杨辉三角 II
知识改变命运 数据结构【杨辉三角(顺序表)】
我们大概分析下题目根据画图可知,我们可以把每一行的元素进行存储,然后再把每一行存储起来,然后就实现了题目 代码:
用户11319080
2024/10/17
660
知识改变命运 数据结构【杨辉三角(顺序表)】
日拱一卒,月进一步(6)(杨辉三角2)
用户11039545
2024/05/04
740
​ LeetCode 118:杨辉三角 II Pascal's Triangle II
Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle.
爱写bug
2019/07/07
3620
LeetCode-119. 杨辉三角II(java)
       这题我一开始拿到以为是直角形状的杨辉三角,其实不然,这题在我上题所解的非常类似​​《LeetCode118.杨辉三角》​​​。无非此题就是在上期的基础上,按要求返回指定行的数据进行返回。其实思路也很简单,你既然能按照指定的行数输出数据,那你也可以指定输出某一行的数据,对吧,你只需要最后在结果集上 ​​return list.get(rowIndex)​​即可。
bug菌
2023/05/27
1980
LeetCode-119. 杨辉三角II(java)
【Leetcode-118. 杨辉三角 -119. 杨辉三角Ⅱ】
题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
YoungMLet
2024/03/01
1250
《LeetCode-数组篇一》之杨辉三角与重塑矩阵
前言 本专栏是LeetCode刷题笔记,记录一下自己的做题轨迹,更好的让自己复习这些令人头痛的题目。博主是一个新手,做题水平非常有限,如有错敬请指出,如有对于题目有更优的解法也可以分享给博主,路漫漫其修远兮,算法之路慢慢而求索。
用户10517932
2023/10/07
1720
《LeetCode-数组篇一》之杨辉三角与重塑矩阵
三分钟看完两道套数学公式的算法题
题目来源于 LeetCode 上第 118 号问题:杨辉三角。题目难度为 Easy,目前通过率为 61.8% 。
五分钟学算法
2019/05/15
6430
三分钟看完两道套数学公式的算法题
118 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
木瓜煲鸡脚
2021/11/30
3780
118 杨辉三角
【Java题解】杨辉三角—力扣
List<List<Integer>>是一个嵌套列表,列表里面存放的也是列表,且存放的列表里面存放的是Integer类型的对象。这类似与一个二维数组。
用户11162265
2024/08/05
920
【Java题解】杨辉三角—力扣
【C++经典例题】杨辉三角问题
“杨辉三角” 问题是一道经典的算法题目,它不仅考验对数组操作的熟练程度,还需要深入理解杨辉三角的数学特性。
倔强的石头_
2025/04/27
1630
【C++经典例题】杨辉三角问题
【杨辉三角】ArrayList和普通二维数组实现
前言: 小编这里有两种方法实现,但是其中一种是要有泛型,以及ArrayList和List有所了解的uu哦
用户11288949
2024/09/24
670
【杨辉三角】ArrayList和普通二维数组实现
日拱算法:解两道“杨辉三角”题
思路简单,把握杨辉三角特点:第0行1个元素,第1行2个元素,第2行3个元素;依此例推
掘金安东尼
2022/09/19
1900
日拱算法:解两道“杨辉三角”题
【每日一题】4.LeetCode——杨辉三角
杨辉三角的第0行只有一个数:1。对于 1 ≤ i < numRows。用pervRow表示杨辉三角的第 i - 1行,用curRow表示杨辉三角的第 i 行.
爱敲代码的小杨.
2024/05/07
1270
【每日一题】4.LeetCode——杨辉三角
LeetCode每日一练(杨辉三角)
题目要求的是给定一个非负索引k,要求得到杨辉三角中的第k行,杨辉三角相信大家都不陌生了吧,不明白的同学去百度一下补补课呦。
wangweijun
2022/01/10
5810
LeetCode每日一练(杨辉三角)
leetcode ​# 118:Pascal's Triangle 杨辉三角
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
爱写bug
2019/06/25
3700
leetcode ​# 118:Pascal's Triangle 杨辉三角
Leetcode#118. Pascal's Triangle(杨辉三角)
题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 5 输出: [ [1], [1,
武培轩
2018/09/28
5800
Leetcode#118. Pascal's Triangle(杨辉三角)
☆打卡算法☆LeetCode 119. 杨辉三角 II 算法解析
“给定一个非负索引 rowIndex ,返回 杨辉三角的第 rowIndex 行。”
恬静的小魔龙
2022/08/07
2040
☆打卡算法☆LeetCode 119. 杨辉三角 II 算法解析
leetcode188.杨辉三角[easy](python)
首先,由于杨辉三角最外层的两边都是1,且杨辉三角的计算需要根据这两边计算,所以我直接初始化一个二维数组,第一维表示有几行,第二维度表示每行有几个元素,初始化值为1,然后我们观察发现,假设参与运算的节点坐标为i,j,则新的杨辉三角的值为arr[i+1][j] = arr[i][j-1] + arr[i][j]。
从不摸鱼的van
2023/10/19
2170
【小Y学算法】⚡️每日LeetCode打卡⚡️——33.杨辉三角
根据题目中给出的图形示例,我们需要定义一个 jagged(锯齿)数组,它的长度与 numRows 一样。
呆呆敲代码的小Y
2021/09/23
2520
【小Y学算法】⚡️每日LeetCode打卡⚡️——33.杨辉三角
相关推荐
​LeetCode刷题实战119: 杨辉三角 II
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档