Makefile文件里的shell语法

来源:互联网 发布:sql 某一字段的合计 编辑:程序博客网 时间:2024/06/08 03:34

在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙。下面总结了一些。

1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码。
eg:
xx = xx1         // 这里是makefile代码
yy:xx = xx2   // 这是是makefile代码,makefile允许变量赋值时,=号两边留空格
yy:
    xx=xx3 // 只有这里是shell代码 ,shell不允许‘=’号两边有空格哦。
有一个例外:
xx=$(shell 这里的代码也是shell代码)

2:Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。
eg:
SUBDIR=src example

all:

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

    do

        echo "building " $$subdir;

    done
 

if [ ${RELEASE} -eq 1 ]; then echo release; else echo debug; fi


3:Makefile中的变量以$开头, 所以,为了避免和shell的变量冲突,shell的变量以$$开头
eg1:从当前目录路径中提取出 /application 或 /base_class 之前的部分
PROJECT_ROOT_DIR = $(shell pwd | awk -F/application|/base_class {print $$1})
eg2:上例中$$subdir就是shell中的变量, 而$(SUBDIR)是Makefile的中的变量

文章摘要:

大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的结果,然后在计算机上运行这些例子,对照看一下。

0 0
原创粉丝点击