百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 网站模板(百分百源码网)>电脑软件>服务器> Linux Makefile与Shell的题目
分享本文到:

Linux Makefile与Shell的题目

发布时间:05/16 来源:未知 浏览: 关键词:

大约只有晓得Makefile的人,都晓得Makefile可以调用Shell脚本。但是在现实运用时,并不那么简略,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的效果,然后在盘算机上运转这些例子,对比看一下。
 
示例一:

复制代码 代码如下:

if [ "$(BUILD)" = "debug" ]; then  echo "build debug"; else echo "build release"; fi
all:
    echo "done"

示例二:
复制代码 代码如下:

all:
    @CC=arm-linux-gcc
    @echo $(CC)

示例三:
复制代码 代码如下:

CC=arm-linux-gcc
all:
    @echo $(CC)

示例四:
复制代码 代码如下:

SUBDIR=src example
all:
    @for subdir in $(SUBDIR); \
    do\
        echo "building " $(subdir); \
    done

 
注明:
1.         Shell脚本在target里才有效,其它地方都被忽略掉了。所以示例一中,”build debug”之类的字符串基本打印不出来。示例一的准确写法是:
 

示例一:

复制代码 代码如下:

all:
    if [ "$(BUILD)" = "debug" ]; then  echo "build debug"; else echo "build release"; fi
    echo "done"

2.         make把每一行Shell脚本当作一个独立的单元,它们在独自的进程中运转。示例二中,两行Shell脚本在两个莫不相关的进程里运转,第一个进程把CC设置为arm-linux-gcc,第二个进程是不晓得的,所以打印的效果天然不是arm-linux-gcc了。示例二的准确写法是:
 
示例二:

复制代码 代码如下:

all:
    @CC=arm-linux-gcc; echo $(CC)

或者:
复制代码 代码如下:

all:
@CC=arm-linux-gcc; \
echo $(CC)

3.         make在调用Shell以前先进行预处置,即展开所有Makefile的变量和函数。这些变量和函数都以$开头。示例三中,Shell拿的脚本现实上是echo arm-linux-gcc,所以打印效果准确。
4.         make预处置时,所有以$开头的,它都不会放过。要想援用Shell本人的变量,应当以$$开头。另外要注意,Shell本人的变量是不需要括号的。示例四的准确写法是:
 
示例四:

复制代码 代码如下:

SUBDIR=src example
all:
    @for subdir in $(SUBDIR); \
    do\
        echo "building " $$subdir; \
    done

热门标签:dede模板 / destoon模板 / dedecms模版 / 织梦模板
责任编辑:9B4wD
打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助



订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板