【发布时间】:2014-10-19 19:00:48
【问题描述】:
我可以在 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.
下面是在带有 GNU Make 3.81 的 Mac OS X 10.9.4 上运行的完全相同的文件:
$ 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 之前,环境中的 SHELL 等于 /bin/bash。这让我觉得在 Makefile 中设置 SHELL 很神奇,这也是 GNU Make 手册说总是设置 SHELL 的众多原因之一。
【问题讨论】:
-
/bin/bash是 OS X 上bash的正确路径?如果您以./myprog(从makefile 内部或外部)运行脚本,它是否可以正常工作? -
是的,/bin/bash 是两个系统上的正确路径。 ./myprog 运行没有任何问题。
-
还有 md5/等。总和确认脚本是相同的?没有意外插入 UTF-8 BOM 或转换为非 unix 换行符或其他任何东西?