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

Spa*_*yNZ 4 mingw gnu-make windows-10

我最近从Window 7迁移到Windows 10,无法继续使用我的makefile。

我一直在使用WindowsGNU Make

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

clean:
    del $(ObjDir)/*.o
Run Code Online (Sandbox Code Playgroud)

当我打电话时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
Run Code Online (Sandbox Code Playgroud)

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

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

是否有一些配置参数可以调用它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.
Run Code Online (Sandbox Code Playgroud)

Spa*_*yNZ 5

这个问题的令人讨厌的结论。

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

C:\Program Files\Git\usr\bin
Run Code Online (Sandbox Code Playgroud)

使用子字符串“ usr \ bin” 添加任何路径将使make尝试运行,sh而不是cmd.exe在Windows上运行。

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

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


Ale*_*ohn 5

最干净的方法是SHELL在命令行上指定。

make -ftest.mak clean SHELL=cmd
Run Code Online (Sandbox Code Playgroud)

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

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