gpt4 book ai didi

path - msys 路径转换(或 msys 的 cygpath?)

转载 作者:行者123 更新时间:2023-12-03 02:25:13 24 4
gpt4 key购买 nike

我需要将/DEF:c:\filepath\myLib.def"命令行选项从 bash 脚本传递到 MS 编译器/链接器。该路径是由 bash 脚本作为构建过程的一部分生成的。基本上,参数我的脚本通过的是:

-DEF:/c/filepath/myLib.def

MSYS path conversion无法正确处理它,因为它不理解 /DEF: 部分。如果我这样做,它就会起作用

-DEF=/c/filepath/myLib.def

但是 MS 工具不理解这个参数。简而言之,在 MSYS bash 中写入该参数以便将其转换为正确的参数的正确方法是什么?

在 cygwin 上我可以使用 cygpath,但没有等效的,因为来自 msys 的人认为不需要它(即使有使用 cygpath 的 cygwin 脚本)。

最佳答案

更新(2016 年 8 月):

这个问题不再相关,如 msys2现在在其安装中附带了cygpath

...

我将在这里总结我的研究。

MSYS 中的 cygpath 等效项是使用以下命令:

{ cd /c/some/path && pwd -W; } | sed 's|/|\\|g'

这种方法的问题是它需要现有路径,例如c:\some\path 必须是现有目录;然而,真正的cygpath支持不存在的路径。

因此,如果您需要获取不存在的目录的路径,那么您可以回退到路径的 sed 转换:

{ cd 2>/dev/null /c/some/path && pwd -W ||
echo /c/some/path | sed 's|^/\([a-z,A-Z]\)/|\1:/|'; } | sed 's|/|\\|g'

满嘴的斜杠是为了满足sed的引用规则。因此,如果您的电脑上不存在 c:\some\path,它会尝试将正斜杠转换为反斜杠,并将 /c/ 替换为 c :\(或任何其他驱动器号)。唯一的缺点是它无法正常工作包含已安装组件的不存在路径,例如 /bin/does-not-exist/usr/bin/does -不存在

另一种方法是在 MSYS 中使用 cygwin 中的cygpath。看来cygwin设置了全局环境变量CYGPATH,也就是说,您可以从常规cmd.exe中使用它:

%CYGPATH% -w /c/some/path
C:\some\path

或来自 MSYS:

$CYGPATH -w /c/some/path
C:\some\path

只要在cygwin中设置将/c指向/cygdrive/c即可。但这种方法将打印您位于 cygwin 安装中的 /usr ,而不是 MSYS 中。

简而言之,我认为 msys 确实应该在默认工具集中包含真正的 cygpath,只是针对某些 msys 命令行参数转换逻辑无法自动处理的情况

关于path - msys 路径转换(或 msys 的 cygpath?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com