zoukankan      html  css  js  c++  java
  • Makefile中的变量和shell变量

    我们在写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中定义的变量时,要使用$$ 并且一定不要使用“”和‘’。

  • 相关阅读:
    xml的servlet配置
    python Matplotlib 系列教程(三)——绘制直方图和条形图
    https://blog.csdn.net/blmoistawinde/article/details/84329103
    机器学习——标准化/归一化的目的、作用和场景
    梯度提升决策树(GBDT)与XGBoost、LightGBM
    最容易理解的对卷积(convolution)的解释
    如何通俗易懂地解释卷积?
    卷积神经网络(CNN)之一维卷积、二维卷积、三维卷积详解
    Conv1D和Conv2D的区别
    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
  • 原文地址:https://www.cnblogs.com/MaAce/p/7755706.html
Copyright © 2011-2022 走看看