要编译内核改写Makefile的时候发现关于cd的一些问题
我需要创建一个环境变量为上一级目录的路径,代码如下:
cd ../
export SRCBASE := $(shell pwd)
执行make,提示:Makefile:15: *** missing separator. Stop.
执行命令需要TAB符在前(前面加一个TAB),修改后如下:
cd ../
export SRCBASE := $(shell pwd)
执行make,发现SRCBASE并不是当前的上级目录!
原因是cd命令在Makefile中只在当前行生效!
正确写法应该是这样:
cd ../ && export SRCBASE := $(shell pwd)
下面看简单的事例:
编辑一个Makefile,执行两个命令,看看效果
1
2 all:
3 cd ../ && pwd
4 pwd
在test目录下执行make
root@:~/test$ make
cd ../ && pwd
/home/root 这是第一个命令,pwd是cd进入上层目录的结果
pwd
/home/root/test 这是第二个命令的结果,还是当前的test命令,cd没生效
注:我的test目录的上一级目录就是root目录
可以看到第一句命令cd ../生效了,但是第二命令pwd打印的是test,而不是root