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

Makefile 中的变量引用

Makefile 中,$ 符号用于变量替换,但它的使用方式有一些细微的区别:

单个 $ 符号($Xxx

  • 用途:用于引用 Makefile 中定义的变量。

  • 用法$ 后面可以跟变量名,通常用括号或花括号括起来以明确变量名的边界。

  • 示例

    VAR = value
    all:
    echo $(VAR)

    在这个例子中,$(VAR) 会被替换为 value

$ 符号($$Xxx

  • 用途:用于在 Makefile 中传递给 shell 的命令中引用 shell 变量。

  • 用法$$ 会被 make 解析为单个 $,从而在 shell 中使用。

  • 示例

    all:
    echo $$PATH

    在这个例子中,$$PATH 会被 make 解析为 $PATH,从而在 shell 中输出环境变量 PATH 的值。

具体区别

  • $Xxx:用于 Makefile 变量替换。make 会在执行命令之前将其替换为变量的值。
  • $$Xxx:用于传递给 shell 的命令中引用 shell 变量。make 会将 $$ 转换为 $,从而在 shell 中使用。

例子

假设你有一个 Makefile 如下:

VAR = Hello

all:
# 使用 Makefile 变量
echo $(VAR)
# 使用 shell 变量
echo $$USER
  • echo $(VAR):make 会将 $(VAR) 替换为 Hello,然后执行 echo Hello
  • echo $$USER:make 会将 $$USER 转换为 $USER,然后 shell 会替换 $USER 为当前用户的用户名。

总结

  • 使用 $ 来引用 Makefile 中的变量。
  • 使用 $$ 来引用 shell 中的变量,以确保在传递给 shell 时保留单个 $ 符号。

随机推荐

  1. Vue的nextTick的原理

    知识储备:事件循环有宏任务和微任务,宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeout setInterval微任务所处 ...

  2. windows下安装部署 hadoop

    一.安装下载 1.首先在hadoop官网下载一个稳定版本,选择binary包 官网地址:https://hadoop.apache.org/releases.html 下载下来是tar.gz文件,用w ...

  3. mysql的执行流程

    本篇章为构建mysql在执行过程中简单的业务流程,为后续的代码优化和面试构建基础. 1.首先一条sql在执行时sql会通过网络传送给mysql 2.在Mysql收到sql语句后会先在分析器中先判断一下 ...

  4. c++时间管理大师

    作者花了一个下午写出来的. c++写的时间管理大师. 支持一下. #include<bits/stdc++.h> #include<windows.h> using names ...

  5. Robust Loop Closure by Textual Cues in Challenging Environments

    arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 [Robust Loop Closure by Textual Cues in Challenging Environmen ...

  6. 初识GO语言--基础命令

  7. 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化

    在使用 HttpClient 发起 HTTP 请求时,可能会遇到请求头丢失的问题,尤其是像 Accept-Language 这样的请求头丢失.这个问题可能会导致请求的内容错误,甚至影响整个系统的稳定性 ...

  8. Flink Checkpoint & Savepoint

    Flink checkpoint Checkpoint是Flink实现容错机制最核心的功能,能够根据配置周期性地基于Stream中各个Operator的状态来生成Snapshot,从而将这些状态数据定 ...

  9. chapter1 events and probability

    第一章  事件和概率 1.1 Appication: verifying polynomial identities 1.2 Axioms of probability 1.3 Application ...

  10. 基于Java+SpringBoot+Mysql实现的古诗词平台功能设计与实现十

    一.前言介绍: 1.1 项目摘要 随着信息技术的迅猛发展和数字化时代的到来,传统文化与现代科技的融合已成为一种趋势.古诗词作为中华民族的文化瑰宝,具有深厚的历史底蕴和独特的艺术魅力.然而,在现代社会中 ...