我正在使用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认为这是一个文件名,然后在找不到它时失败。

是否有人对此有经验或知道我该如何解决?

最佳答案

对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品牌或类似产品。)

关于windows - dmake中的shell命令添加了 '/S',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12270987/

10-10 16:46