【问题标题】:Why does make.exe try to run /usr/bin/sh on Windows?为什么 make.exe 尝试在 Windows 上运行 /usr/bin/sh?
【发布时间】:2018-06-01 04:16:01
【问题描述】:

我最近从 Window 7 迁移到了 Windows 10,我的 makefile 无法再工作了。

我一直在用GNU Make for Windows

我注意到的第一件事是它已开始将 Windows 文件夹分隔符(反斜杠字符“\”)视为行继续字符,因此我修改了“干净”部分,如下所示,改为使用正斜杠“/”字符:

clean:
    del $(ObjDir)/*.o

当我调用 make -ftest.mak clean 时,我收到以下错误,这表明它现在正在尝试在 MinGw/Cygwin 环境中运行:

c:\Test\Source>make -ftest.mak clean
del obj/*.o
/usr/bin/sh: del: command not found
make: *** [clean] Error 127

我的 PC 上确实有 MinGw 文件夹(我已将其重命名以停止查找它)并且在我的 Cmd.exe 环境或 PATH 中看不到任何与“MingGw”相关的环境变量

我怎样才能让make 工作,这样它就不会尝试在Windows 下执行sh

是否有一些配置参数使它调用sh 而不是cmd.exe

更新:刚刚尝试运行 make -d 来记录调试输出。看起来好像它正在使用我的 Git 文件夹作为某种根文件夹:

Must remake target `clean'.
del obj/*.o
CreateProcess(NULL,C:/Program Files/Git/usr/bin/sh.exe -c "del obj/*.o",...)
Putting child 0x006e7fc0 (clean) PID 7234712 on the chain.

【问题讨论】:

  • 如果你在 makefile 中指定它,GNU Make 将不会使用任何错误的启发式方法来检测你的 shell,如 SHELL := cmd,根据 5.3.2 Choosing the Shell

标签: windows-10 mingw gnu-make


【解决方案1】:

这个问题的糟糕结论。

makePATH 环境变量中查找包含usr/bin 的任何内容。碰巧因为我也在我的 Windows 10 PC 上安装了 Git,所以 Git 将以下文件夹添加到 PATH

C:\Program Files\Git\usr\bin

添加带有子字符串“usr\bin”的any路径将导致make尝试在Windows上运行sh而不是cmd.exe

我的解决方案:从我的PATH 中删除C:\Program Files\Git\usr\bin

更新:我将名称从 usr\bin 更改为 user\bin,但 make 仍然在该文件夹中找到 sh.exe。最后,我在Git\usr\bin 文件夹中将sh.exe 重命名为_sh.exe

【讨论】:

  • 所以根据你的说法,是 PATH 中存在 sh.exe 导致 make 使用它。
【解决方案2】:

最简洁的方法是在命令行中指定SHELL

make -ftest.mak clean SHELL=cmd

将完成这项工作。 ndk-build 会为您执行此操作,请参阅您的 ndk-build.cmd。不要尝试在 Windows 上运行 ndk-build bash 脚本。当您在 Windows 上使用 bash 运行 NDK 中的脚本时,它们可能会变为 amoc。

【讨论】:

  • 谢谢 - 这个问题与专有构建系统有关,而不是 Android。 :-)
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2013-11-25
  • 2012-10-25
  • 2016-07-19
  • 1970-01-01
  • 2012-12-06
相关资源
最近更新 更多