2011-04-17 201 views
4

我在将我在Makefile中修改的PATH导出到当前终端时遇到了一些麻烦。 我试图添加到PATH,无论Makefile目录在哪里的bin文件夹。通过Makefile将目录添加到PATH

这里的生成文件的相关条:

PATH := $(shell pwd)/bin:$(PATH) 

install: 
    mkdir -p ./bin 
    export PATH 
    echo $(PATH) 

回波打印它正确,但如果我重做回波在终端中,PATH保持相同。

在此先感谢您的帮助。

+0

可能有更好的运气问在http://unix.stackexchange.com/ – 2011-04-17 20:56:25

+0

感谢您的提示,我会尝试@蜡笔暴力 – Bruno 2011-04-17 21:02:04

+0

@蜡笔:构建系统明确是一个编程主题,并提出问题--- while可能在unix上可以接受。在堆栈溢出上,*更好*。 – dmckee 2011-04-17 23:32:14

回答

4

如果您使用了GNU make,你需要明确export子流程PATH变量的环境:

export PATH := $(shell pwd)/bin:$(PATH) 

install: 
    mkdir -p ./bin 
    export PATH 
    echo $(PATH) 
+3

他不想将其导出到子流程,而是导出到“超级流程”。 – eriktous 2011-04-18 00:17:26

1

你所要做的是不可能的。 Make运行在另一个进程中,而不是终端中的shell。 make过程中对环境所做的更改不会转移到shell。

也许你在混淆export声明的效果。 export不会将变量的值从make过程导出到shell。相反,export标记变量,因此它们将转移make的任何子进程。据我所知,没有办法改变父进程的环境(你开始制作的shell是make进程的父进程)。

也许this答案会使导出变量的子概念更清晰一些。

+1

虽然你说得对,一个'make'进程不能改变其父进程的环境(据我所知),这里的'export PATH'语句是一个配方的一部分,因此不被视为'make '语法,但作为shell语法在子shell中执行。 – eriktous 2011-04-18 00:04:04