gpt4 book ai didi

macos - 在 Mac OS X 上的 Makefile 中设置 PATH(但它适用于 Linux)

转载 作者:行者123 更新时间:2023-12-01 13:41:36 26 4
gpt4 key购买 nike

我可以在 Linux 上的 Makefile 中设置 PATH,但不能在 Mac OS X 上设置。在 OS X 中,PATH 已设置但未使用。这是一个演示:

在带有 bash 4.1.2(1)-release 和 GNU Make 3.81 的 CentOS 6 上

$ pwd
/tmp/experiment
$ find * -type f -ls
132133 4 -rw-rw-r-- 1 tlim tlim 113 Aug 26 11:01 Makefile
132132 4 -rwxrwxr-x 1 tlim tlim 28 Aug 26 10:59 bin/myprog
$ cat Makefile
export PATH := $(shell /bin/pwd)/bin:$(PATH)

what:
@echo PATH=$$PATH
@echo PATH=$(PATH)
which myprog
myprog
$ cat bin/myprog
#!/bin/bash
echo HERE I AM.
$ make what
PATH=/tmp/experiment/bin:/usr/stack/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
PATH=/tmp/experiment/bin:/usr/stack/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
which myprog
/tmp/experiment/bin/myprog
myprog
HERE I AM.

下面是在 Mac OS X 10.9.4 和 GNU Make 3.81 上运行的完全相同的文件:

$ pwd
/tmp/experiment
$ find * -type f -ls
51838886 8 -rw-rw-r-- 1 tal wheel 113 Aug 26 07:01 Makefile
51838887 8 -rwxrwxr-x 1 tal wheel 28 Aug 26 06:59 bin/myprog
$ cat Makefile
export PATH := $(shell /bin/pwd)/bin:$(PATH)

what:
@echo PATH=$$PATH
@echo PATH=$(PATH)
which myprog
myprog
$ cat bin/myprog
#!/bin/bash
echo HERE I AM.
$ make what
PATH=/tmp/experiment/bin:/Users/tal/bin:/opt/local/sbin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin
PATH=/tmp/experiment/bin:/Users/tal/bin:/opt/local/sbin:/opt/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin
which myprog
/tmp/experiment/bin/myprog
myprog
make: myprog: No such file or directory
make: *** [what] Error 1

如您所见,PATH 正在设置并导出到环境中。 “echo $PATH”和“which myprog”都显示路径已设置。但是,当运行“myprog”时,shell 找不到它。

更新:如果我将这两行添加到 Makefile 中的 what 配方中:

@echo SHELL=$$SHELL
@echo SHELL=$(SHELL)

Linux 和 Mac 输出:

SHELL=/bin/bash
SHELL=/bin/sh

在运行make 之前,两者在环境中都有等于/bin/bashSHELL。这让我觉得在 Makefile 中设置 SHELL 是很神奇的,也是 GNU Make 手册说总是设置 SHELL 的众多原因之一。

最佳答案

事实证明 PATH 变量是特殊的,除非 "SHELL" is also set 否则不会导出。 .换句话说,如果我将这一行添加到 Makefile,它就可以在 Mac 和 Linux 上运行:

SHELL=/bin/bash

当然,这让我想知道为什么 Mac 与众不同。希望通过在此处记录这一点,看到此问题的其他人也会受益。另外,我想知道为什么 Mac 与众不同,如果确实如此的话。

关于macos - 在 Mac OS X 上的 Makefile 中设置 PATH(但它适用于 Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com