强制 mingw32-make 忽略 sh 文件

3
我注意到,如果PATH中存在sh.exe,则mingw32-make将使用它来启动命令。但如果没有,它将使用cmd.exe。问题是这两个应用程序完全不兼容,没有办法创建适用于两者的makefile。
有没有办法让mingw32-make始终使用cmd.exe?或者创建一个环境来强制mingw32-make忽略sh.exe?

如果不是在类似于Cygwin或MSYS这样的环境下运行,为什么会将sh.exe添加到PATH中呢?这太糟糕了。 - rubenvb
@rubenvb 因为很多应用程序(如... git)会自行添加它。此外,有些人会在他们的MinGW安装中添加sh.exe,但我不能指望它。 - PierreBdR
@rubenvb 我需要使用命令行来使用git,所以这不是一个选择。而且,无论如何,应该有一种方法来指定makefile是为cmd.exe还是sh.exe编写的,因为它们不兼容。 - PierreBdR
1
这就是为什么你应该选择这个选项。请注意,你选择的选项有一个大大的红色警告告诉你不要选择它。 - rubenvb
@LightnessRacesinOrbit 嗯,如果你知道怎么做的话...例如,要删除文件,你需要使用带有sh.exe的'rm',但是带有'cmd.exe'的'del',所以你需要知道使用哪个。 - PierreBdR
显示剩余2条评论
2个回答

7

事实证明,我偶然找到了解决方案。我曾经读过mingw32-make应该查看SHELL环境变量......但它没有!不过,你可以像下面这样在命令行中指定选项:

mingw32-make SHELL=cmd

这不是最理想的解决方法,但这是我能想到的最好的办法。目前,我将保留这个问题的未回答状态,以防有人能提出更好的答案。

当你需要sh.execmd.exe中的make时,这是合法的答案。在我看来,这没有任何“不理想”的地方。 - Timothy Gu
太棒了,谢谢!顺便说一句,您也帮助了很多FPGA开发人员 :-): https://forums.xilinx.com/t5/Embedded-Development-Tools/SDK-won-t-build-in-WIN7-errors-out/m-p/241584/highlight/false 顺便提一下,SHELL=cmd是区分大小写的,所以开关应该像这样精确地指定。 - Piedone
在Makefile本身的规则之前添加SHELL=cmd也可以起作用,这样你就不必每次调用时都记得它。 - Guy

1
我曾经遇到相似的问题,通过从批处理文件中启动make并在调用make之前添加以下内容解决了该问题: 设置PATH...仅包含必要的根目录。

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