首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dmake中的shell命令添加“/S”

dmake中的shell命令添加“/S”
EN

Stack Overflow用户
提问于 2012-09-05 04:36:00
回答 1查看 319关注 0票数 3

我正在用MinGW系统编译Xindy。dmake总是死于一个错误,我已经在Makefile中把它缩小到了几行。尝试在下面的命令上运行dmake:

代码语言:javascript
复制
SHELL = /bin/sh
some-target:
    target=`echo info-recursive | sed s/-recursive//`;

如果您使用常规的Windows CMD而不是MinGW shell,则必须更改SHELL变量的位置,使其指向类似于"C:/MinGW/msys/1.0/sh.exe“的内容。无论如何,上述操作都会失败,出现以下错误:

代码语言:javascript
复制
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,它们工作得很好。当我尝试将给定的命令作为错误消息本身的输出运行时,得到的结果是:

代码语言:javascript
复制
$ /bin/sh /S /c "target=`echo info-recursive | sed s/-recursive//`;"
/bin/sh: /S: No such file or directory

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-05 07:12:58

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

代码语言:javascript
复制
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 make或类似的产品。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12270987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档