如果从shell运行,则完全相同的命令行会在Make中生成错误但仍然成功
我有一个问题,我无法绕过头脑。 我有一个最小的示例makefile,它应该将一个非常简单的.c文件编译成可执行程序。
当我运行make时 ,编译器开始编译然后生成错误消息
“T:\ printOffsets.c:10:21:错误:bootIfc.h:没有这样的文件或目录”
然后我复制完全相同的命令行make is用于构建目标并直接在同一个Windows命令shell实例中运行它,突然编译成功而没有错误! 命令行是(路径名简化):
T:\ perl \ c \ bin \ gcc.exe T:\ printOffsets.c -IT:\ include \ -o D:\ printOffsets.exe
我怎么知道? 好吧, make在执行它之前打印命令行,所以我只需从shell复制并粘贴。
我不明白! 这怎么可能?? 如果在Makefile中启动,那么完全相同的命令如何在shell上工作并失败?
顺便说一下,我在Windows 7上使用GNU Make 3.82。
当makefile中的命令给出不同的shell结果时,只需确保它使用你想要的shell。
在make文件中添加一个假目标:
.PHONY:testshell testshell: echo $(SHELL)
并运行:
gmake testshell
如果结果不是你最喜欢的shell,你可以通过在makefile的开头添加一行这样的行来强制它:
SHELL=C:\Windows\System32\cmd.exe
如果您不确定shell的完整路径,只需打开DOS控制台并启动:
where cmd
编辑:替代解决方案
当使用sh
shell而不是cmd
shell时,你也可以用斜杠替换命令中的所有反斜杠,并继续使用sh
。
编辑2: 更改单个目标的shell