Makefile和shell脚本的区别

来源:互联网 发布:mac怎么看不到移动硬盘 编辑:程序博客网 时间:2024/05/17 22:07

在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文尝试归纳下Makefile和shell脚本的不同

1、 shell中所有引用以$打头的变量其后要加{},而在Makefile中的变量是以$打头的后加()或者{}。如下所示:

MakefilePATH="/data/"SUBPATH=$(PATH)ShellPATH="/data/"SUBPATH=${PATH}
2、Makefile中所有以$打头的单词都会被解释成Makefile中的变量。如果你需要调用shell中的变量(或者正则表达式中锚定句为$),都需要加两个($$)。如下所示

Makefile引用shell中的变量,方法如下,注意,改引用变量如果在Makefile存在了,实际测试发现该变量引用shell变量不成功。

all:        echo $$PATH

3、通配符区别

shell中通配符*表示所有的字符

Makefile中通配符%表示所有的字符

4、在Makefile中只能在target中调用shell脚本,其他地方是不能输出的。如以下代码则没有任何输出

VAR = "Hello"        echo "$(VAR)"all: 
以上代码则不会输出任何信息,并且还会报错,修改成以下代码则正确输出,因此Makefile只能在target中调用shell

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

5、在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“;\”,以此来保证是一行而不是多行,这样Makefile可以在一个进程中执行,例如,在Makefile中创建子文件夹

all:        mkdir dirtest ;\        cd dirtest;\        mkdir subdirtest
如果不加“;\”看看会发生什么情况

6、Makefile中获取当前目录

PATH = `pwd`  注意是符号“·”而不是“‘”



原创粉丝点击