Makefile 无法使用环境变量看到 sh 或 bash cygwin bins



在我的办公室,我们最近更换了一台笔记本电脑,现在我和我的一位同事在编译代码时遇到了问题。

我们的一个编译工具需要Cygwin 32位版本,我刚安装了一个,我的同事复制并粘贴了他以前笔记本电脑上的那个。我们得到的电脑是64位的,但以前的电脑也是64位的。

我们两个都有makefile返回此错误的问题:

make: "C:cygwinbin"/sh: No such file or directory
make: *** [Makefile:401: clean] Error 127

我们定义";C: \cygwin\bin"正在使用环境变量CYGWIN_BINDIR,我们在makefile中这样调用它:

export CAT = "$(CYGWIN_BINDIR)"/cat
export TOUCH = "$(CYGWIN_BINDIR)"/touch
export SHELL = "$(CYGWIN_BINDIR)"/sh      <----Complaining part
export COPY = "$(CYGWIN_BINDIR)"/cp
export PERL = "$(CYGWIN_BINDIR)"/perl

我可以看到sh的二进制文件存在于给定的路径中,我知道我们将反斜杠与正常斜杠混合在一起,但我读到cygwin负责解决这个问题,我们多年来一直在这样编译。

如果我们修改自:

export SHELL = "$(CYGWIN_BINDIR)"/sh

收件人:

export SHELL = sh

现在makefile可以使用二进制文件了,似乎只有sh在抱怨,因为所有其他二进制文件,比如cat/touch/cp/等等。。。正在被makefile正确使用。

你知道我们这里缺少什么吗?

正如我提到的,我们已经用了很多年了。我不知道我们在赛格温的设置中缺少了什么。

这里的问题是make(按照它的工作原理(将双引号作为另一个字符处理,而不是像其他解释器那样扩展它,例如shell解释器。

因此,make试图将SHELL变量设置为包含双引号的路径"C:cygwinbin"/sh,显然该路径不存在。

请注意,cygwin能够处理反斜杠和普通斜杠,甚至是混合斜杠。

这是使用非常旧版本的cygwin修复的,其中双引号用于解释反斜杠,否则路径"$(CYGWIN_BINDIR)"/sh(而不是扩展到C:cygwinbin/sh(将扩展到C:cygwinbin/sh

我知道我们本可以修复我们的makefile以使用最新版本的cygwin,但由于这是一个与其他遗留工具链接的遗留项目,我们决定使用旧版本的cygwin。

最新更新