Makefile随笔(一):shell 执行

参考

shell

我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被 /bin/sh ——UNIX的标准Shell 解释执行的。除非你特别指定一个其它的Shell。Makefile中, # 是注释符,很像C/C++中的 // ,其后的本行字符都被注释。

但windows上没有提到命令行是被谁解析,但在编译某个开源代码时使用只有使用作者打包的mingw才能编译成功,使用TDM-GCC-64、nuwen-mingw、MinGW.org的mingw都编译失败,最后发现是shell问题。

把makefile精简成

1
2
3
4
5
folder:
echo "folder"
mkdir build
mkdir -p build/test
mkdir build\test\test2

使用cmd来执行makemingw32-make都会提示mkdir -p build/test这一行命令语法不正确。,使用msysGit-bash(也是基于msys)以及作者提供的mingw中的make时就会创建文件夹成功。

然后发现,作者提供的mingw\bin中有一个sh.exe,以及msysgit-bashbin目录下都有sh.exe,结合上面跟我一起写Makefile中的那一句,答案就应该是如果当前PATH中有sh.exe则会使用sh.exe来执行命令行,sh.exe能正确处理linux风格的路径。

随带:sh.exe的参数格式是sh.exe --login -c "<command>",举例:sh.exe --login -c "echo hello"