首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Makefile中的变量替换会产生意外的结果

在Makefile中,变量替换是一种常见的操作。它允许我们使用变量来代替一些特定的值或命令,并在编译或构建过程中动态地替换这些变量。然而,有时候变量替换可能会导致意外的结果。

原因是在Makefile中,变量替换的发生时机可能与我们预期的不一致。Makefile使用"="或":="来定义变量,而使用"$(变量名)"或"${变量名}"来进行替换。这意味着当我们定义一个变量时,它的值是立即替换的,而不是在使用时才替换。

例如,考虑以下Makefile代码片段:

代码语言:txt
复制
VAR := $(OTHER_VAR)
OTHER_VAR := value

我们期望VAR的值是"$(OTHER_VAR)"的结果,即"value"。然而,由于变量替换的发生时机,VAR实际上被赋值为空字符串,因为在定义VAR时,OTHER_VAR的值尚未定义。

为了避免这种意外结果,我们可以使用延迟变量替换。延迟变量替换使用"="定义变量,而使用"$(变量名)"或"${变量名}"进行替换。这样,变量的替换发生在使用变量的时候,而不是在定义变量的时候。

下面是修改后的代码片段:

代码语言:txt
复制
VAR = $$(OTHER_VAR)
OTHER_VAR = value

现在,VAR的值将会是"value",因为延迟变量替换确保了在使用VAR时才进行替换。

总结:

Makefile中的变量替换可能会导致意外的结果,因为替换发生时机与预期可能不一致。为了避免这种情况,可以使用延迟变量替换,确保替换发生在使用变量的时候。这样可以更准确地控制变量的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

makefileinclude作用(makefile变量)

或者可以使用 obj=$(dir:%.c=%.o) 效果也是一样。 这里用到makefile替换引用规则,即用您指定变量替换另一个变量。...它标准格式是 $(var:a=b) 或 ${var:a=b} 它含义是把变量var每一个值结尾用b替换掉a 今天在研究makefile时在网上看到一篇文章,介绍了使用函数...示例: $(patsubst %.c,%.o,x.c.c bar.c) 把字串“x.c.c bar.c”符合模式[%.c]单词替换成[%.o],返回结果是“x.c.o bar.o” make中有个变量替换引用...对于一个已经定义变量,可以使用“替换引用”将其值后缀字符(串)使用指定字符(字符串)替换。...使用变量替换引用将变量“foo”以空格分开所有的字尾字符“o”替换为“c”,其他部分不变。

3.2K50

Java变量,宏替换详解。

群友在微信群讨论一个话题,有点意思,特拿出来分享一下。 输出true false 来看下面这段程序,和群友分享大致一样。...且个进行==操作却是true有一个是false,而没用final却是false?...首先来理解下宏变量: Java,一个用final定义变量,不管它是类型变量,只要用final定义了并同时指定了初始值,并且这个初始值是在编译时就被确定下来,那么这个final变量就是一个宏变量。...编译器会把程序所有用到该变量地方直接替换成该变量值,也就是说编译器能对宏变量进行宏替换。...所以,再回到上面的程序,finalWorld2和finalWorld4是final定义,也是在编译期间能确定下来,所以它能被宏替换,编译器就会让finalWorld2和finalWorld4指向字符串池中缓存字符串

3.7K50

怎么替换json对象key?

,并且由于在替换过程我们删除了之前key,所以导致序列化之后obj与之前obj存在较大差异。...但所有这些示例无一例外都不能同时满足下面两个要需: 保留要替换key在原json对象顺序。既保证在JSON.stringify()执行之后输出字符串key顺序和原json对象是一致。...某些情况下,我们需要对一个复杂json对象子元素进行修改,如果修改之后返回一个新json对象,则无法保证这个新对象反应到原json对象。...如果我们对res某些key进行替换,而返回一个新json对象的话,那么这个修改就不会反应到obj对象。...在这个过程,如果遇到真正需要替换key,则不再进行二次替换

1.7K10

4种方法实现ggplot2aes()变量替换

介绍 ggplot2里aes()可以用tidyselect风格去选择变量做映射绘图,那么这种情况下如何实现「变量替换」呢? 首先说下我为什么要实现「变量替换」。...我目前实际需求就是,分析代码+绘图代码篇幅太长,在封装流程时候我想要把变量提到前面,通过替换一个变量来避免后面多次修改替换变量。 方法与演示 有!!as.name()、get()、!!...sym()和.data[[]] 共计四种有效方法在aes()实现变量替换。...代码演示如下: library(ggplot2) # 创建一个包含变量数据框 data <- data.frame( x = c(1, 2, 3, 4), y = c(10, 20, 30,...40), group = c("A", "A", "B", "B") ) # 定义一个变量,用于替换图形属性 color_var <- "group" # 使用变量替换创建散点图 ggplot

20910

PHP替换Word变量并导出PDF图片实现方法

在线生成合同信息,一个 word 文件里面有些信息需要通过数据库读取计算出并填写到 word 文档中最终显示在线 pdf 预览功能,接下来我交大家如果实现该需求 2、接下来实现如何替换文档内容 我们新建一个...aa.docx 文档,里面放了一个变量信息 3、接下来使用 php 来替换这个变量信息 代码如下 ......storage_path('contract.docx'); // 声明模板象并读取模板内容 $templateProcessor = new TemplateProcessor($path); // 替换模板内容...($filePath); 这样我们就完成了 word 里面模板变量替换是不是比较简单呢 4、接下来/ 【php教程_linux常用命令_网络运维技术】 /我们需要处理 word 文档转为 pdf 我也在网上了查了比较多资料...,什么先转为 html 然后通过 其它包方式或者扩展来转 pdf 确实都能实现,但是有一点 word 转为 html 时候格式丢失这就和我们需求有点偏离,后面转换了方向,使用工具来把 word

2.8K00

Python规范变量命名让你代码更优雅

在Python,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。变量名应该清晰地表达其用途或含义,避免使用无意义名称。好命名习惯能让你代码更优雅,读起来更有故事感。 1....py # 刚刚好 num_students = 55 # 太短或太长 n = 55 students_count_today_in_class = 55 避免数字开头 数字开头变量让人困惑,而且...# 正确做法 second_score = 95 禁止使用Python关键字 Python有一些保留词汇,如if, for, class等,它们有特殊含义,用作变量让你程序大乱套。...团队约定 如果你在团队工作,确保大家遵守相同命名规则。团队协作,规则先行。 回顾与重构 定期回顾代码,看看是否有变量命名可以改进地方。重构不只是代码优化,也是命名艺术提升。 2....进阶技巧 类变量与实例变量区分命名 在面向对象编程,区分类变量(属于类本身)和实例变量(属于类每个实例)很重要。通常,类变量会用全大写字母,中间用下划线连接,以示区别。

7910

Loadrunner 运行场景-场景全局变量与关联结果参数

结果:每个用户全局变量取值日志都一样,先输出 "value_for_int_var" = "1",然后输出"value_for_int_var" = "2" 结论:针对全局变量,针对场景每个用户...,全局变量取值互不干扰,相当于说,每个用户都有一个自己全局变量变量名称,变量初始值都一样,每个用户负责更新自己全局变量值。...Paramter ListVuserID Action2 模拟把服务器返回结果当作下一步输入来使用 Action2() { int vuserID; int result; lr_start_transaction...结论:场景,每个并发用户负责自己数据结果。...关联参数 基于A实验结果,关联参数取值也是一样,所以,并发场景下,也可以通过关联函数web_reg_save_param获取服务器返回结果,并在下一个步骤中使用

79210

bash shell参数展开(Shell Parameter Expansion):替换变量(variable)字符串

在写bash shell脚本时,如果遇到要替换变量字符串,首先想到就是用sed命令,比如下面的示例将变量str数字123替换成UUU: $ str=hello,word,123 $ echo...$str | sed -E -e 's/[0-9]/U/g' hello,word,UUUU 上面的例子中用到echo,sed两个命令来实现字符串替换,略显麻烦 其实bash提供了更简单语法来实现上面的功能...,按照{parameter/pattern/string}模式可以简单的如下替换 {parameter/pattern/string}格式说明: 参数名 说明 parameter 变量名 pattern...匹配模板(类似正则表达式),据此查找要匹配字符串 string 对满足pattern匹配条件字符串进行替换字符串 pattern 格式参见 《Pattern-Matching》 https...=hello,word,123 $ echo ${str//[0-9]/U} hello,word,UUU ## 如果只是要替换第一个出现数字则这样写 $ echo ${str//[0-9]/U} #

3.8K20

Xcode修改变量名、类名及字符串替换操作

Xcode修改变量名、类名及字符串替换操作         在做iOS开发代码优化工作时,优化代码结构之前,我们应该先整理好工程外貌,将文件和类命名进行规范,在Xcode为我们提供了方便而强大名称修改功能...Xcode左侧搜索栏搜索: ?         ...        Ending with:检索出以检索条件结尾对象 我们选择Matching,进行检索,将检索出来地方进行Replace替换,通过这一步,我们可以替换代码注释,字符串,类方法以及...xib和StoryBoard文件关联id,cell复用符等。...第三步:修改文件变量名         在文件,我们也可以通过command+F换出搜索框,将Find改选为Replace检索进行我们想要变量替换

2.2K20

论文能否?这篇分析同行评审结果论文可帮助你

最后,当然……这一研究论文已经被即将在 6 月 1 日于美国举行自然语言处理顶 NAACL 2018 接收。...我们结果显示:在 PeerRead 四个不同部分,与大多数全部拒绝(reject-all) 基线相比,我们能够以误差减小 6--21%de 结果预测「接受/拒稿」决策结果。...结果: 表 5 展示了我们在论文接受准确率上测试准确率。在所有的例子,我们最佳模型都以大于 22% 误差率优势超过大部分分类器。...我们对数据集中 ICLR 和 arXiv 部分进行了控制变量研究。为了简化分析,我们为 arXiv 三种类别训练了一个模型。...在第二个任务,我们预测了评审方面的数值分数,结果表明,对于诸如「原创性」和「影响」高方差方面,简单模型可以优于平均基线。

83540

生化小课 | 未经治疗糖尿病产生危及生命酸(含生物系统pH变化缓冲小结)

未经治疗糖尿病产生危及生命酸 许多在血液起作用酶已经进化到在pH值7.35到7.45之间(人类血浆正常pH值范围)具有最大活性。...因此,pH值微小变化会对一些关键酶催化反应速率产生很大影响,细胞和体液pH值生物控制在新陈代谢和细胞活动所有方面都至关重要,血液pH值变化产生显著生理后果。...当发现患者血糖高、血浆 pH 值低以及血液和尿液 β-羟基丁酸和乙酰乙酸水平高时,很可能诊断为糖尿病。 其他情况也产生酸中毒。例如,禁食和饥饿迫使将储存脂肪酸用作燃料,其后果与糖尿病相同。...非常剧烈运动,比如跑步者或骑自行车的人冲刺,导致血液乳酸短暂积累。肾衰竭导致调节碳酸氢盐水平能力下降。...肺部疾病(如肺气肿、肺炎和哮喘)降低组织燃料氧化产生CO2处理能力,从而导致H2CO3积累。 酸中毒治疗是通过处理潜在情况-给糖尿病患者注射胰岛素,给肺部疾病患者注射类固醇或抗生素。

23330

实战Makefile前,该知道那些知识?

如果目录已存在,那么将产生错误。从例子说明,mkdir出错并没有对其他命令产生影响,因为我只要目录存,所以mkdir出错不应该终止命令规则运行。...赋值符'+=': Makefile变量是字符串,有时候我们需要给前面已经定义好变量添加一些字符串进去,此时就要使用到符号"+=": OBJ = main1.o main2.o OBJ += main3...这些变量可以让我们更加快速完成Makefile编写,其中自动变量只能在规则命令使用,常用自动变量如下: $@:规则目标 $<:规则第一个依赖文件 $^:规则所有依赖文件 CC...命令执行完,SRC变量值:./src/add.c ./src/main.c patsubst函数:用于匹配替换。函数参数:原模式+目标模式+文件列表,使用方法: SRC = $(wildcard ..../src/main.o 表示:把变量中所有后缀为.c文件替换为.o。命令执行完,OBJ变量值:./src/add.o ./src/main.o

47920

母牛故事 替换空格 二进制1个数 不使用第三个变量交换a,b

= EOF, 2.替换空格 题目链接:传送门 描述: 请实现一个函数,将一个字符串s每个空格替换成“%20”。...例如,当字符串为We Are Happy.则经过替换之后字符串为We%20Are%20Happy。 数据范围:1000 \0≤len(s)≤1000 。...保证字符串字符为大写英文字母、小写英文字母和空格一种。...其次题目要求是将目标字符串“空格”替换为“%20”,这里特别注意是“%20“是三个字符(‘%’,‘2’,‘0’组成).所以我们不能直接将"空格"赋值为”%20”. 3.我们遍历目标字符数组(字符串...解题思路 方法1: 当一个数n&1时候,我们就可以得到n这个数最低位.是否为1,为1则返回1,反之返回0.

18320

Mybatis事务原理和自动提交设置 事务四大特性 隔离性产生3个问题及解决办法

Mybatis事务原理和自动提交设置 Mybatis事务 什么是事务 事务是指的是一个业务上最小不可再分单元,通常一个事务对应了一个完整业务,而一个完整业务需要批量DML语句共同联合完成...不考虑隔离性产生3个问题 脏读:一个事务读到另一个事务未提交数据。...事务提交 Mybatis事务是通过sqlsession对象commit方法和rollback方法实现事务提交和回滚 走来走去提交和回滚都少不了connection,也就是原来jdbc操作...我们在创建sqlsession设置了提交方式,所以导致每一次都需要commit 但是有着一个方法变成自动提交 只需要改一下就好了 我们在后面的操作就不需要进行提交操作了 这样你...@Test依然可以进行 注意:这用不多,每次执行一个对数据库CRUD操作可以用这个,如果一个方法里面多次和数据库进行交互,如果每个连接处于独立连接,这个事务是控制不住(spring中会详细分析

2.6K30

Makefile基本用法

Makefile文件列出了依赖关系。默认执行第一行。 ? 其中,下面两行等价 ? ? 使用变量简化 添加objects变量后,形成以下简化形式。内容不变。 ?...无空格换行等价 单行长度过长不易于阅读,转义符本身导致替换空格产生。 可以使用符号配合转义符,由于转义后与空格,不存在,被替换为空,则形成第三行。 ? ? ?...包含其他Makefile include挂起当前make,对include中提供Makefile文件进行读取和执行。...= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 = 和:=不同在于后者是立即生效,而前者在整个变量赋值结束后才作为生效结果(deferred推迟)。 ?...在替换目标,\1表示替换第一部分,然后添加.o和空格和该规则下先决条件名。 sed将上一句生成依赖关系一些部分进行了替换,写入到了每个先决条件文件下。

2.5K40

6_Makefile与GCC

产生错误提示,无法找到test.h头文件。...但是警告可能往往会被人忽略,但是有时候,编译警告导致运行结果不是你想要内容。...不过上面的Makefile仍然有问题,就是工程源文件不断增加,如果按照上面的写法,你会发现,Makefile越来越臃肿。下面我们讲解如何解决这个臃肿问题。...:我们见上面的Makefile第二行“=”替换成“:=”,重新编译,如下: $ make print 100 $ ​ 从结果上看,变量CURPARA值为“100”。...6.5.3 自动变量Makefile语法提供一些自动变量,这些变量可以让我们更加快速完成Makefile编写,其中自动变量只能在规则命令使用,常用自动变量如下: ​ 1)$@:规则目标

3.6K10
领券