码迷,mamicode.com
首页 > 系统相关 > 详细

makefile中的shell编程注意点

时间:2016-07-20 19:30:55      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

参考:http://blog.csdn.net/wanglang3081/article/details/49423105

(1)Makefile本质上来讲也是shell脚本,即每条command都是shell进程,运行完shell进程都会退出。

 

(2)shell代码行,如果有=的话,=两边不能有空格

 

(3)Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。可以用\来分行写,格式更清晰一点。

SUBDIR=src example

all:

    @for subdir in $(SUBDIR); /      // 这里往下是一行shell

    do/

        echo "building " $$subdir; /

    done

 

 

(4)    Makefile中的变量以$开头,使用$(VAR)或${VAR}来引用变量的定义。 所以,为了避免和shell的变量冲突,shell的变量以$$开头。

          注意:Makefile中在对一些简单变量的引用,我们也可以不使用“()”和“{}”来标记变量名,而直接使用“$x”的格式来实现,此种用法仅限于变量名为单字符的情况。另外自动化变量也使用这种格 式。对于一般多字符变量的引用必须使用括号了标记,否则make将把变量名的首字母作为作为变量而不是整个字符串(“$PATH”在Makefile中实际上是“$(P)ATH”)。这一点和shell中变量的引用方式不同。shell中变量的引用可以是“${xx}”或者“$xx”格式。但在Makefile中多字符变量名的引用只能是“$(xx)”或者“${xx}”格式。

CU_PROJECT_NAME := $(shell pwd |awk -F "/" {print $$NF} )

 

(5)在Makefile中只能在target中调用Shell脚本,其他地方是不能输出的。比如如下代码就是没有任何输出。

VAR="Hello"
echo "$(VAR)"

all:
   .....

只要下面的才有输出

VAR="Hello"

all:
    echo "$(VAR)"
    .....

 

 

(6)在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“;  \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行。

for file in $(SRC_FILE);        do            gcov -b "$$file";        done

 

 

(7)Makefile中所有以$打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句位$),都需要加两个$符号($$)。

PATH="/data/"

all:
    echo ${PATH}/*Makefile中变量,即"/data"*/
    echo $$PATH /*shell中的变量*/
例子中的第一个${PATH}引用的是Makefile中的变量,而不是shell中的PATH环境变量,后者引用的事Shell中的PATH环境变量。

makefile中的shell编程注意点

标签:

原文地址:http://www.cnblogs.com/blue-sea-sky/p/5689181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!