【问题标题】:Adding directory to PATH through Makefile通过 Makefile 将目录添加到 PATH
【发布时间】:2011-08-07 11:18:40
【问题描述】:

我在将我在 Makefile 中修改的 PATH 导出到当前终端时遇到了一些问题。 我正在尝试将 Makefile 目录所在的 bin 文件夹添加到 PATH 中。

这是makefile的相关片段:

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

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

echo 打印正确,但如果我在终端中重做 echo,PATH 保持不变。

提前感谢您的帮助。

【问题讨论】:

  • unix.stackexchange.com提问可能会更好
  • 感谢您的提示,尝试一下@Crayon Violent
  • @Crayon:构建系统是一个明确的编程主题,并且会提出问题——虽然在 unix.SE 上可能可以接受,但在 Stack Overflow 上更好

标签: unix path makefile directory pwd


【解决方案1】:

如果您使用的是 GNU make,则需要将 PATH 变量显式地export 指向子进程的环境:

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

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

【讨论】:

  • 他不想将其导出到子进程,而是导出到“超级进程”。
【解决方案2】:

您尝试做的事情是不可能的。 Make 正在另一个进程中运行,而不是终端中的 shell。 make 过程中对环境的更改不会转移到 shell。

也许您混淆了export 语句的效果。 export 不会将变量的值从 make 过程导出到 shell。相反,export 标记变量,以便将它们转移到 make 的任何子进程。据我所知没有办法改变父进程的环境(你开始make的shell就是make进程的父进程)。

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

【讨论】:

  • 虽然make 进程无法更改其父进程的环境是对的(据我所知),但这里的export PATH 语句是配方的一部分,并且因此不被视为make 语法,而是在子shell 中作为shell 语法执行。
【解决方案3】:

也许您可以依靠用户为您做这件事。注意引用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2014-09-15
    • 2020-01-21
    • 1970-01-01
    • 2016-12-05
    • 2012-12-22
    相关资源
    最近更新 更多