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

all: hello hello2 hello3

hello: hello.c
gcc ....
hello2: hello2.c
gcc ...
hello3: hello3.c
gcc ...
  • shell变量定义和使用:
NAME=hello #这里一定不要有空格 hello可以加上""或'' 若定义的值有空格 则要加上"" 或 ''
echo $NAME #这里使用变量时 要加上$ 也可以${NAME} 但是不能$()这个表示执行里面的命令
  • makefile中的变量定义:
HHH=hello  #方式一
ZZZ = hello #方式二
all:
echo $HHH #这样输出并不能输出HHH的值 A
echo $ZZZ #同上
echo $(HHH) # 输出hello B
echo $(ZZZ) # 输出hello 这里可以看到有别与shell变量定义。
echo ${HHH} # 输出hello C
echo ${ZZZ} # 输出hello
echo $$HHH # 输出空 #$$这种方式是shell中使用makefile中定义的变量 这是一个command line。 D
echo $$ZZZ # 输出空 if [ -n "${HHH}" ];then echo "OK";fi; #这里正确输出OK E
if [ -n "${ZZZ}" ];then echo "OK";fi; # 正确输出OK
if [ -n "$(HHH)" ];then echo "OK";fi; # 正确输出OK H
if [ -n "$(ZZZ)" ];then echo "OK";fi; # 正确输出OK
if [ -n "$HHH" ];then echo "OK";fi; # 变量名不正确 J
if [ -n "$ZZZ" ];then echo "OK";fi; # 变量名不正确
if [ -n "$$ZZZ" ];then echo "OK";fi; #没有输出 K
if [ -n "$$HHH" ];then echo "OK";fi;#没有输出
if [ -n $$ZZZ ];then echo "OK";fi; #输出OK L
if [ -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中定义的变量时,要使用$$ 并且一定不要使用“”和‘’。

Makefile中的变量和shell变量的更多相关文章

  1. 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

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

  2. 【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

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

  3. 从hivesql结果中读取数值到shell变量的方法

    为了检查hive表中的数据,并统计展现,需要将查出的结果传入到shell变量,然后统一输出到文本. 最后使用了以下两个方法: 方法一 QUAN=$(hive -S -e "select co ...

  4. linux如何使make输出makefile中所有的规则和变量

    答: make -p (会执行makefile,加入-q可以阻止makefile的执行)

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

    http://c.biancheng.net/cpp/shell/ 1.打印 2.运算符

  6. (转载)linux中shell变量

    (转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量.shell变量可以保存 ...

  7. awk中引用shell变量的方法

    1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...

  8. makefile中的shell编程注意点

    参考:http://blog.csdn.net/wanglang3081/article/details/49423105 (1)Makefile本质上来讲也是shell脚本,即每条command都是 ...

  9. shell变量

    定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...

随机推荐

  1. [POJ 1410] Intersection(线段与矩形交)

    题目链接:http://poj.org/problem?id=1410 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  2. PHP获取文件扩展名的五种方式

    这是我应聘实习时遇到的一道笔试题: 使用五种以上方式获取一个文件的扩展名. 要求:dir/upload.image.jpg,找出 .jpg 或者 jpg , 必须使用PHP自带的处理函数进行处理,方法 ...

  3. angular指令的4种设计模式

    指令的功能集非常丰富,不过我们已经发现了指令的帕累托分布:使用angular编写的大量指令只会用到可用性和设计模式中很小的比例,这些指令大概可以分为4类: 只渲染指令--这些指令将渲染作用域中的数据, ...

  4. bootstrap折叠调用collapse()后data-parent不生效问题

    今天做的项目,用到了bootstrap的折叠功能,这个功能需要只展开一个折叠框,点击一个就会自动隐藏另一个,初始按照API做了一下,发现一切运行正常,但是测试的同事提了一个bug,说切换到其他模块后再 ...

  5. Ionic3 一些命令

    ionic start --help E:\Projects\ionic>ionic start --help ionic start - Create a new project This c ...

  6. 一个基于EntityFramework Core的简单数据库访问层,适用于轻量级数据库业务

    这个访问层的代码实际上是园子里某个前辈的,本人只是觉得好使,记录了下来. 本访问层需要通过Nuget安装EntityFramework Core,不过个人认为EF 6同样可以使用. 搭配数据库,最好是 ...

  7. css给div添加阴影效果

    直接上代码: <style type="text/css">.mydiv{   width:250px; height:auto; border:#909090 1px ...

  8. font-size:100% 原因

    The browser default which is something like 16pt for Firefox, You can check by going into Firefox op ...

  9. selenium-iframe操作

    iframe,又叫浮动帧标记,是内嵌的网页元素,可以将一个html文件嵌入到另一个html文件中显示. 最典型的案例就是163邮箱登录:http://mail.163.com/,被绿色覆盖的部分即为i ...

  10. ASP.NET Core集成现有系统认证

    我们现在大多数转向ASP.NET Core来使用开发的团队,应该都不是从0开始搭建系统,而是老的业务系统已经在运行,ASP.NET Core用来开发新模块.那么解决用户认证的问题,成为我们的第一个拦路 ...