Cygwin GNU make无法识别POSIX格式路径

Cygwin GNU make无法识别POSIX格式路径,cygwin,gnu-make,Cygwin,Gnu Make,以下是我今天用cygwin安装工具在windows 10 pc上安装的GNU Make版本: GNU Make 4.2.1 Built for x86_64-unknown-cygwin 我有一个简单的测试生成文件: include /c/temp/vs.mk 当我进行此操作时,出现以下错误: makefile:1: /c/temp/vs.mk: No such file or directory make: *** No rule to make target '/c/temp/vs.mk

以下是我今天用cygwin安装工具在windows 10 pc上安装的GNU Make版本:

GNU Make 4.2.1
Built for x86_64-unknown-cygwin
我有一个简单的测试生成文件:

include /c/temp/vs.mk
当我进行此操作时,出现以下错误:

makefile:1: /c/temp/vs.mk: No such file or directory
make: *** No rule to make target '/c/temp/vs.mk'.  Stop.
当我把线路换成

include c:\temp\vs.mk
它起作用了

我认为任何为cygwin GNU make构建的都应该识别POSIX路径格式而不是Windows路径格式,但是这个简单的测试表明我的GNU make版本不是这样

现在,我有另一台windows 7 pc,我很早以前就安装了以下GNU Make版本:

GNU Make 3.81
This program built for i686-pc-cygwin
当我测试make时,POSIX路径格式和Windows路径格式都起作用


我在谷歌上做了很多搜索,但没有相关信息可以解释为什么会发生这种情况

据我回忆,Cygwin提供了自己的GNU make版本,支持Cygwin路径。我想我不记得有代码更改需要允许GNU make使用Cygwin路径


您可能应该描述如何构建这个版本的GNU make,并且应该从这个问题中删除makefile标记,并添加GNU make和cygwin标记。。。一些熟悉Cygwin的人可能会来帮忙。

这不是Cygwin的POSIX路径

/c/temp/vs.mk
为了验证,我们可以显示根内容

 $ ls -1F /
bin/
cygdrive/
Cygwin.bat*
Cygwin.ico
Cygwin64_Terminal.lnk*
Cygwin-Terminal.ico
dev/
etc/
home/
lib/
proc/
sbin/
srv/
tmp/
usr/
var/
没有C目录 Windows驱动器号在哪里?它们安装在/cygdrive下

该设置/行为是Cygwin创建时的默认设置。 当您需要在Windows和Posix path或viceversa之间进行转换时,请使用cygpath


我已经找到了这一切发生的原因

基本上,有一个文件cygwinfolder/etc/fstab可以修改以指定cygdrive路径前缀。默认的cygdrive路径前缀是/cygdrive,这就是为什么前缀为/cygdrive的POSIX路径可以像在我的第一台机器中一样进行干净的安装。以下是我的第一台计算机中fstab文件中的内容:

none /cygdrive cygdrive binary,posix=0,user 0 0
在我的第二台机器上,我很久以前修改过这个文件,但我忘记了。它已将cygdrive路径前缀设置为/。以下是fstab文件中的内容:


有关更多详细信息,请参阅。

我没有生成此版本。我用cygwin安装工具安装了它。谢谢你的建议,我已经添加了标签。哦,那么你肯定需要和cygwin的人核实一下。祝你好运你试过:/cygdrive/c/temp/vs.mk吗?很好用!这是cygwin在3.81之后增加的一项功能吗?看来它已经存在很久了。不确定是不是因为3.81好,这很有帮助,但是你知道为什么/c/temp/vs.mk为安装在另一台机器上的GNU make 3.81 I工作吗?可能不是Cygwin制造的。2015年发布的4.1-1版Cygwin make中肯定没有特殊代码
$ cygpath -u "c:\temp\vs.mk"
/cygdrive/c/temp/vs.mk 

$ cygpath -w /cygdrive/c/temp/vs.mk
C:\temp\vs.mk
none /cygdrive cygdrive binary,posix=0,user 0 0
none / cygdrive binary,posix=0,user 0 0