我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节。让我们从一个简单的makefile来看看。
注意makefile中一定要有一个目标,且一定要有一个终极目标,若想要有多个目标应该设立一个伪目标。如下:

all: hello hello2 hello3hello: hello.cgcc ....
hello2: hello2.cgcc ...
hello3: hello3.cgcc ...
  • shell变量定义和使用:
NAME=hello #这里一定不要有空格 hello可以加上""或'' 若定义的值有空格 则要加上"" 或 ''
echo $NAME #这里使用变量时 要加上$  也可以${NAME}  但是不能$()这个表示执行里面的命令
  • makefile中的变量定义:
HHH=hello  #方式一
ZZZ = hello #方式二
all:echo $HHH #这样输出并不能输出HHH的值   Aecho $ZZZ #同上echo $(HHH) # 输出hello Becho $(ZZZ) # 输出hello 这里可以看到有别与shell变量定义。echo ${HHH} # 输出hello  Cecho ${ZZZ} # 输出helloecho $$HHH # 输出空 #$$这种方式是shell中使用makefile中定义的变量 这是一个command line。     D echo $$ZZZ # 输出空if [ -n "${HHH}" ];then echo "OK";fi;  #这里正确输出OK   Eif [ -n "${ZZZ}" ];then echo "OK";fi; # 正确输出OKif [ -n "$(HHH)" ];then echo "OK";fi; # 正确输出OK       Hif [ -n "$(ZZZ)" ];then echo "OK";fi; # 正确输出OKif [ -n "$HHH" ];then echo "OK";fi; # 变量名不正确       Jif [ -n "$ZZZ" ];then echo "OK";fi; # 变量名不正确if [ -n "$$ZZZ" ];then echo "OK";fi; #没有输出      Kif [ -n "$$HHH" ];then echo "OK";fi;#没有输出if [ -n $$ZZZ ];then echo "OK";fi; #输出OK        Lif [ -n $$HHH ];then echo "OK";fi;#输出OK

我认为makefile的变量定义使用就像是c/c++中的宏的使用方式 只是替换而已
1. 情况A中: echo $HHH 是优先于第一个字符结合去找$H变量 但是这里没有H定义 所以A这种情况 就是 echo HH 会输出HH
2. 情况BC中:正确的使用方式
3. 情况D中:变量名变为$HHH 这样的变量名为空
4. EH 中: 正确
5. J中$HHH 变为 HH
6. K 因为没有定义$HHH这个变量
7. L 正确方式 与D的差别就是这句是shell D是command
以上是结合实际情况的个人理解

总结就是 makefile变量定义可以有空格, 使用变量时用$() 若在shell中使用makefile中定义的变量时,要使用$$ 并且一定不要使用“”和‘’。

转载于:https://www.cnblogs.com/MaAce/p/7755706.html

Makefile中的变量和shell变量相关推荐

  1. linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell 中,每一个变量的值 ...

  2. Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...

  3. linux shell变量作用域,Shell变量的作用域:Shell全局变量、环境变量和局部变量

    Shell变量的作用域(Scope),就是Shell变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像A班有个叫小明的同学,B班也有个叫小明的同学,虽然他们都叫小明( ...

  4. linux创建环境变量有什么用,环境变量和shell变量到底有什么区别呢?

    open-end 于 2007-06-02 21:21:10发表: 我们仍以BASH 为讨论的shell 语言 每一种编程语言中,我们都会碰到变量的作用域的问题.(比如在函数中定义的变量在函数外不能使 ...

  5. linux echo输出结果赋值给变量,shell变量n位补零

    name=`echo $1|awk '{printf("%04d\n",$0)}'`    将 $1 进行4位数补零,后传递字符串给 name. 将下面代码,命名为 playVid ...

  6. makefile中变量有哪些?

    make一些参数选项: -p 选项,可以打印出make过程中的数据库, 下面研究一下内置的变量和规则. -n 选项, 只运行,不执行, -d 选项,相当于–debug=a,b(basic),v(ver ...

  7. Makefile中的变量

    Makefile中的变量 2007-11-03 12:03 Makefile中变量有以下几个特征: 1. Makefile中变量和函数的展开(除规则命令行中的变量和函数以外),是在make读取make ...

  8. linux 中 set,env,export,declare显示shell变量的区别

    shell变量包括两种变量 1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量 A1="1234" delcare A2="2345 ...

  9. linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别

    shell变量包括两种变量 1.本shell私有的变量:通过赋值语句定义好的变量,可以通过如下方法定义shell变量 A1="1234" delcare A2="2345 ...

最新文章

  1. RHEL5搭建apache服务器全过程(四)配置heartbeat和ipvsadm
  2. 前端就业之vue介绍
  3. onclick 获取img 里面的id_红魔5S游戏手机如何解锁bl获取第三方面具root权限
  4. 一道笔试题引发的Promise笔记
  5. 招商银行周伟:Fintech数据开放平台之数据库军规和内功修炼(含PPT)
  6. python字符串连接数字电视_【学习猿地】初识python脚本 #千万别看,我怕你控制不住...
  7. 不为人知的Nothing和Is
  8. 用DISM修复Win10系统文件教程
  9. ImageJ Merge荧光图片
  10. Java项目:SSM网吧计费管理系统
  11. win2008服务器系统玩红警,WIN10 64位系统完美运行红色警戒2教程
  12. 第一次竞选博客之星,第一次阳光普照
  13. blowfish加密算法(c实现)
  14. python[爬虫]爬取百万条新浪新闻 新浪滚动新闻中心(多进程)
  15. 【读书笔记】《比基尼口才》文皙铉
  16. 中大近代物理实验实验报告(LaTeX实现)
  17. 快慢指针求环入口问题:
  18. 【Bellhop-二维海水声速环境下的声线仿真】
  19. markdown与Typora
  20. 浅谈 git 底层工作原理

热门文章

  1. Catalina.stop: Connect refused解决过程
  2. duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
  3. 十大经典排序算法动画与解析
  4. 机器学习知识点(一)文本字符信息熵Java实现
  5. (转载)JavaScript一些实用技巧(http://it.chinawin.net/softwaredev/article-261f.html)
  6. 在二叉树中找到累加和为指定值的最长路径长度
  7. 软件设计原则——开闭原则
  8. 函数的使用——未完待续
  9. MATLAB中的字符串处理
  10. 关于Icon,Image,ImageIcon的简单的对比参考