2

更改 Makefile 中的环境变量 PATH 不会对 CLT 中的 make 生效,而使用我从原始源编译的 make util 可以。

简单的 Makefile

PATH := $(PATH):/opt/bin

export PATH

all:
      @cscope --version

我的测试

/tmp $ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin
/tmp $ ls /opt/bin/cscope
/opt/bin/cscope
/tmp $ which make
/usr/bin/make
/tmp $ make
make: cscope: No such file or directory
make: *** [all] Error 1
/tmp $ ./_install/bin/make
cscope: version 15.7a
/tmp $ make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.


This program built for i386-apple-darwin11.3.0
/tmp $ ./_install/bin/make --version
GNU Make 3.82
Built for x86_64-apple-darwin12.0.0
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

任何人都可以帮忙吗?

4

1 回答 1

2

您将make变量与shell变量混淆了。通过您的设置,被调用的 shell 命令不受您设置的make变量PATH的影响。

您应该PATH在配方中设置变量,例如

all:
    @PATH=$(PATH):/opt/bin; cscope --version

您必须在一行中同时执行,因为配方中的每一行都将在另一个 shell 中运行,从而有效地丢失PATH您刚刚所做的设置。\或者,您可以通过在每行末尾添加反斜杠将其分成多行:

all:
    @PATH=$(PATH):/opt/bin; \
    cscope --version

更新

抱歉,我错过了您的 makefile 与make 3.82. 我确实尝试了这两个版本,3.81并且3.82在这种情况下表现不同。

我确实通过如下3.81调用来使用它:make

make SHELL="/bin/sh -c"

或者

make SHELL=/bin/bash
于 2012-07-31T17:45:36.000 回答