3

我正在用 MinGW 系统编译 Xindy。dmake总是因错误而死,我已将其缩小到 Makefile 中的几行。尝试在此运行 dmake:

SHELL = /bin/sh
some-target:
    target=`echo info-recursive | sed s/-recursive//`;

如果您使用的是常规 Windows CMD 而不是 MinGW shell,则必须更改 SHELL 变量的位置以指向类似“C:/MinGW/msys/1.0/sh.exe”的内容。无论如何,以上失败:

CreateProcess failed (2).
dmake: Error executing 'bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"': No such file or directory
dmake: Error code -1, while making 'some-target'

sed 和 sh 已安装,它们工作正常。当我尝试将给定命令作为错误消息本身的输出运行时,我得到以下信息:

$ /bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"
/bin/sh: /S: No such file or directory

所以似乎dmake(或其他东西)正在将'/S /c'添加到shell参数中,而bash认为它是一个文件名,然后在找不到它时失败。

有没有人有这方面的经验或知道我该如何解决这个问题?

4

1 回答 1

2

对dmake源代码的简要检查表明问题在于$(SHELL)设置得太晚并且在启动时仍然为空(macros.mk,第 37 行):

11  .IF $(SHELL) == $(NULL)
...
15     SHELL *:= $(COMSPEC)
...
...
35  .IF $(SHELL) == $(COMSPEC)
36  .IF $(COMSPEC:lf) == cmd.exe
37     SHELLFLAGS       *:= $(SWITCHAR)S $(SWITCHAR)c

您可以通过添加SHELL="C:/MinGW/msys/1.0/sh.exe"到您的 dmake 命令行调用来解决此问题。

(我已经很多年没有使用过 dmake 了,所以这里可能会出错,但是如果你能得到一个看起来像自动没收的 makefile 来与 dmake 一起工作,我会印象深刻,IIRC 的风格有些不同。它可能更容易查找 GNU品牌或类似产品。)

于 2012-09-04T23:12:57.793 回答