首页
学习
活动
专区
工具
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中的变量替换可能会导致意外的结果,因为替换发生时机与预期可能不一致。为了避免这种情况,可以使用延迟变量替换,确保替换发生在使用变量的时候。这样可以更准确地控制变量的值。

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

相关·内容

makefile中的include的作用(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.3K50
  • Java中的宏变量,宏替换详解。

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

    3.8K50

    你会怎么替换json对象中的key?

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

    1.7K10

    Makefile文件中,两个$的变量变量$$Xxx 与一个$的变量 $Xxx的区别

    原文地址:Makefile文件中,两个\$的变量变量\$\$Xxx 与一个\$的变量 \$Xxx的区别Makefile 中的变量引用在 Makefile 中,$ 符号用于变量替换,但它的使用方式有一些细微的区别...:单个 $ 符号($Xxx)用途:用于引用 Makefile 中定义的变量。...双 $ 符号(\$\$Xxx)用途:用于在 Makefile 中传递给 shell 的命令中引用 shell 变量。用法:\$\$ 会被 make 解析为单个\$,从而在 shell 中使用。...具体区别$Xxx:用于 Makefile 变量替换。make 会在执行命令之前将其替换为变量的值。\$\$Xxx:用于传递给 shell 的命令中引用 shell 变量。...echo \$\$USER:make 会将 \$\$USER 转换为 $USER,然后 shell 会替换 $USER 为当前用户的用户名。总结使用 $ 来引用 Makefile 中的变量。

    6310

    4种方法实现ggplot2的aes()中的变量替换

    介绍 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

    27610

    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....进阶技巧 类变量与实例变量的区分命名 在面向对象编程中,区分类变量(属于类本身)和实例变量(属于类的每个实例)很重要。通常,类变量会用全大写字母,中间用下划线连接,以示区别。

    11310

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

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

    82910

    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.9K20

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

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

    2.3K20

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

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

    86240

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

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

    26030

    实战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

    48920

    【Linux必备工具】自动化构建工具makefile的使用详解

    如果第一行是一个空行,可能会导致 Make 工具不正确地解释 Makefile,从而产生意外的行为或错误。 2.2.2 目标 目标:指定了要生成的文件或要执行的操作名。...变量:可以使用变量来存储命令选项、编译器名称等信息,然后在规则中引用这些变量。...Makefile 工作原理 makefile 或者Makefile 文件会被make从上到下扫描,如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件...对于gcc的编译,我们都知道要生成一个可执行程序需要经过预处理、编译、汇编和连接,中间会产生.i,.o,.s文件。但是在上面的操作中都没有生成中间文件。...此外:Makefile中可以编写变量,表达式之间不建议带空格 通过 $(变量名) 来引用变量的值。

    22410

    母牛的故事 替换空格 二进制中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.

    19220

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

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

    2.8K30

    Makefile基本用法

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

    2.5K40
    领券