当路径中的 CygWin 出现时 Makefile 失败

当路径中的 CygWin 出现时 Makefile 失败

我试图弄清楚为什么 makefile 中的一个简单 Windows 命令会失败仅有的当 CygWin 二进制文件夹包含在 PATH 变量中时。

为了从等式中去除大多数变量,我使用了下面的基本 makefile:

clean:
    del /F /Q file.txt

我正在从仅包含以下内容的目录中运行 GNU make 3.81制作工具生成文件

C:\temp\test>dir /b
make.exe
makefile

C:\temp\test>make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for Windows32

当 PATH 包含 Cygwin 二进制文件夹时,我收到 ProcessCreate() 错误。

C:\temp\test>path=c:\tools\cygwin\bin

C:\temp\test>make clean
del /F /Q file.txt
process_begin: CreateProcess(NULL, del /F /Q file.txt, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [clean] Error 2

否则,它会按预期工作。

C:\temp\test>set path=

C:\temp\test>make clean
del /F /Q file.txt
Could Not Find C:\temp\test\file.txt

这对我来说毫无意义。
知道这里发生了什么吗?

答案1

经过更多的实验和阅读,我取得了一些进展。我认为我现在明白了其中的逻辑。

看来,一旦 sh.exe 进入,makefile 中的所有配方命令都是 shell 命令PATH。它们不能是 windows 命令。

从中删除 sh.exe 之后cygwin/bin,原始 makefile 按照我的预期工作。还可以在 makefile 中明确指定“cmd”来代替默认的“sh”,如下所示:

clean:
    cmd /c 'del /F /Q file.txt'

如果这是正确的,那就有点令人失望了。通过cygwin/bin在“PATH”中,我假设任何类型的命令都可以在 makefile 中使用,就像在 windows 命令或批处理文件中一样。

我仍然不明白的是,当 sh.exe 无法访问时,windows 命令仍然有效。仍然缺少部分逻辑。

(抱歉,我在错误的网站上发帖,我以为我在 stackoverflow 上。如果版主可以移动或删除此帖子,请这样做。

相关内容