为什么make.exe在Windows上尝试运行/usr/bin/sh?

8
我最近从Windows 7升级到了Windows 10,但是我的makefile无法正常工作。
我一直在使用GNU Make for Windows
我注意到的第一件事是它开始将Windows文件夹分隔符(反斜杠字符'\')视为换行符,因此我修改了“clean”部分,如下所示,改用正斜杠'/'字符:
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

我在我的电脑上有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.

3
如果在makefile中指定了你的shell(例如SHELL := cmd),GNU Make将不会使用任何有失败风险的启发式方法来检测它,详见5.3.2 选择Shell - Mike Kinghan
2个回答

8
最简单的方法是在命令行上指定SHELL
make -ftest.mak clean SHELL=cmd

会做这份工作。 ndk-build 可以帮你完成,查看你的 ndk-build.cmd。不要在 Windows 上尝试运行 ndk-build bash 脚本。在 Windows 上使用 bash 运行 NDK 中的脚本可能会出现问题。


2
谢谢 - 这个问题与专有的构建系统相关,而不是 Android。 :-) - SparkyNZ

6
这个问题的结论很糟糕。 makePATH 环境变量中查找包含 usr/bin 的内容。恰巧我在 Windows 10 上也安装了 Git,Git 将以下文件夹添加到了 PATH 中:
C:\Program Files\Git\usr\bin

将任何包含子字符串"usr\bin"的路径添加到中,将导致make在Windows上尝试运行sh而不是cmd.exe

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

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


所以根据您所说的,是路径中存在sh.exe导致make使用它。 - Andreas Maier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接