nichelnich 发表于 2015-03-09 14:27

Makefile解疑

本帖最后由 nichelnich 于 2015-03-09 16:26 编辑

有三个文件
-----test1.sh
#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/lib1

-----test2.sh
#!/bin/sh
echo $LD_LIBRARY_PATH

-----Makefile
.PHONY : all
all:
    ./test1.sh && ./test2.sh
    export LD_LIBRARY_PATH=/usr/local/lib1 && ./test2.sh

-----------make结果:
./test1.sh && ./test2.sh
/usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib1 && ./test2.sh
/usr/local/lib1

-----------------问题:
Makefile的第一行和第二行的结果为什么不同呢?make在运行shell命令的时候会创建子进程,子进程设置的环境变量是不会对父进程有影响的。既然都是创建子进程运行,那么./test1.sh && 和 export LD_LIBRARY_PATH=/usr/local/lib1 && 除了格式上,又有什么区别呢?

fengidri 发表于 2015-03-09 16:18

你这, 解什么啊!! 本来就是这样啊!! 说清楚你想问什么?

nichelnich 发表于 2015-03-09 16:26

update 回复 2# fengidri


   

fengidri 发表于 2015-03-09 16:34

./test1.sh 也是一个子进程

nichelnich 发表于 2015-03-09 16:38

export LD_LIBRARY_PATH=/usr/local/lib1 也是一个子进程啊,那结果为什么不一样。区别在哪回复 4# fengidri


   

fengidri 发表于 2015-03-09 17:02

./test1.sh && ./test2.sh   这一行是在一个makefile的子进程里, 你明白的吧。我说的是./test1.sh还在这个子进程的下面的又一个子进程。这样可以明白吧!!

nichelnich 发表于 2015-03-09 17:06

如果是这样,问题已经清楚的解决,:victory: (没点拨,还真难懂呢)回复 6# fengidri


   

fengidri 发表于 2015-03-09 17:14

好了, 解决就好。

nichelnich 发表于 2015-03-09 17:19

你知道我怎么想的吗,我是以一个命令为单位去理解的。应该一行才是一条命令。就是Makefile里的概念command line。有时候就是出发点错了。谢谢你回复 8# fengidri


   
页: [1]
查看完整版本: Makefile解疑