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
5folder:
echo "folder"
mkdir build
mkdir -p build/test
mkdir build\test\test2
使用cmd
来执行make
、mingw32-make
都会提示mkdir -p build/test
这一行命令语法不正确。,使用msys
或Git-bash
(也是基于msys)以及作者提供的mingw
中的make
时就会创建文件夹成功。
然后发现,作者提供的mingw\bin
中有一个sh.exe
,以及msys
、git-bash
的bin
目录下都有sh.exe
,结合上面跟我一起写Makefile中的那一句,答案就应该是如果当前PATH
中有sh.exe
则会使用sh.exe
来执行命令行,sh.exe
能正确处理linux风格的路径。
随带:sh.exe
的参数格式是sh.exe --login -c "<command>"
,举例:sh.exe --login -c "echo hello"
。