Unix 通过Makefile将目录添加到路径

Unix 通过Makefile将目录添加到路径,unix,path,makefile,directory,pwd,Unix,Path,Makefile,Directory,Pwd,我在将生成文件中修改的路径导出到当前终端时遇到一些问题。 我试图添加到路径中,即Makefile目录所在的bin文件夹 以下是makefile的相关条带: PATH := $(shell pwd)/bin:$(PATH) install: mkdir -p ./bin export PATH echo $(PATH) 回波正确打印,但如果我在终端中重做回波,路径将保持不变 提前感谢您的帮助。如果您使用的是GNU make,则需要显式地将PATH变量导出到子流程的环境

我在将生成文件中修改的路径导出到当前终端时遇到一些问题。 我试图添加到路径中,即Makefile目录所在的bin文件夹

以下是makefile的相关条带:

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

install:
    mkdir -p ./bin 
    export PATH
    echo $(PATH)
回波正确打印,但如果我在终端中重做回波,路径将保持不变


提前感谢您的帮助。

如果您使用的是GNU make,则需要显式地将PATH变量导出到子流程的环境中:

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

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

你想做的是不可能的。Make正在终端中的shell之外的另一个进程中运行。在生成过程中对环境所做的更改不会传递到shell

也许您混淆了
export
语句的效果<代码>导出不会将make过程中的变量值导出到shell。相反,
export
标记变量,以便将它们传输到make的任何子进程。据我所知,无法更改父进程的环境(启动make的shell是make进程的父进程)


也许答案会让将变量导出到子进程的概念更加清晰。

也许您可以依靠用户为您完成这项工作。注意引用

install_hint:
    @echo "Execute this command at your shell prompt:"
    @echo "export PATH=$(shell pwd)/bin:\$$PATH"

也许你会更幸运的问一下谢谢你的提示,我要试试那个@CrayonViolent@Crayon:构建系统是一个明确的编程主题,生成问题——虽然在unix上可能可以接受。SE在堆栈溢出方面更好。虽然你说得对,
make
进程不能更改其父进程的环境(据我所知),此处的
export PATH
语句是配方的一部分,因此不被视为
make
语法,而是在子shell中作为shell语法执行。他不想将其导出到子进程,而是要导出到“超级进程”。