【问题标题】:GNU make won't recognize POSIX format pathGNU make 无法识别 POSIX 格式路径
【发布时间】:2020-01-31 21:24:38
【问题描述】:

这是我今天使用 cygwin 安装工具在我的 windows 10 电脑上安装的 GNU Make 版本:

GNU Make 4.2.1
Built for x86_64-unknown-cygwin

我有一个简单的测试makefile:

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 电脑,很久以前我安装了以下 GNU Make 版本:

GNU Make 3.81
This program built for i686-pc-cygwin

当我测试 make 时,POSIX 路径格式和 Windows 路径格式都有效。

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

【问题讨论】:

  • 你试过了吗:/cygdrive/c/temp/vs.mk?
  • 行得通!这是 3.81 之后的 cygwin 的新增功能吗?
  • 似乎它已经存在很久了。不确定是不是从 3.81 开始

标签: cygwin gnu-make


【解决方案1】:

这不是 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

$ ls -1F /cygdrive
c/
d/
e/

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

$ cygpath -u "c:\temp\vs.mk"
/cygdrive/c/temp/vs.mk 

$ cygpath -w /cygdrive/c/temp/vs.mk
C:\temp\vs.mk

【讨论】:

  • 好的,这有帮助,但你知道为什么/c/temp/vs.mk 为我安装在另一台机器上的 GNU make 3.81 工作吗?
  • 可能不是 Cygwin 制造的。当然,2015 年发布的 4.1-1 版本的 Cygwin 中没有特殊代码 cygwin.com/ml/cygwin-announce/2015-02/msg00097.html
【解决方案2】:

据我所知,Cygwin 提供了自己的支持 Cygwin 路径的 GNU make 版本。我认为(不记得)需要更改代码以允许 GNU make 使用 Cygwin 路径。

你可能应该描述你是如何构建这个版本的 GNU make 的,你应该从这个问题中删除 makefile 标签并添加 gnu-makecygwin 标签......一些熟悉 Cygwin 的人可能会出现来帮忙。

【讨论】:

  • 我没有构建这个版本。我用 cygwin 安装工具安装了它。感谢您的建议,我已经添加了标签。
  • 哦,那您肯定需要与 cygwin 人员核实一下。祝你好运!
【解决方案3】:

我找到了发生这种情况的原因。

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

none /cygdrive cygdrive binary,posix=0,user 0 0

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

none / cygdrive binary,posix=0,user 0 0

更多详情,请参考https://cygwin.com/cygwin-ug-net/using.html#cygdrive

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2016-09-11
    • 2015-04-19
    • 2015-08-28
    • 2019-07-20
    相关资源
    最近更新 更多