为啥 MinGW/MSys 会更改二进制路径?

Posted

技术标签:

【中文标题】为啥 MinGW/MSys 会更改二进制路径?【英文标题】:Why does MinGW/MSys change the binary path?为什么 MinGW/MSys 会更改二进制路径? 【发布时间】:2012-06-24 20:39:48 【问题描述】:

我正在使用 Mingw 构建一个 C/C++ 项目。这个项目的 makefile 超出了我的理解,并且依赖于一个自定义且非常复杂的工具链来编译它。在 Windows 上使用 GNU 工具非常方便,尤其是在 Windows 的 cmd shell 中,但是在调用这些工具(尤其是 make)时,MinGW 似乎改变了我的 PATH。

Cmd 正常执行:

echo %PATH% > ... c:\Apps\msys\bin ... (from cmd)

但 msys 将此地址更改为:

echo $PATH > ... /usr/bin ...

在 msys 中,即使我从 makefile 打印 PATH。结果,make 抱怨它找不到诸如 make、uname、echo 之类的命令,你可以命名它(不是双关语)。

奇怪的是,我很久以前就成功地让这个环境正常工作了,但这是我记得第一次看到这个路径问题。如何让 MinGW/msys 正确指向其可执行文件?

【问题讨论】:

您是否更改了配置文件。听起来你已经在某处设置了 PATH 。查看 .bashrc .profile /etc/profile /etc/bash.bashrc 我总是在 xterm(不是 cmd)中使用 bash shell,我从不说任何像这样无法解释的问题。试试/usr/bin/find / -mount -print0 | /bin/xargs -0 /bin/grep PATH | /usr/bin/less 我没有接触过配置文件。经过仔细检查,make 似乎在抱怨,因为 makefile 修改了路径,并且似乎 Windows 风格的路径和 Linux 风格的路径发生冲突。再说一次,不久前我有这个开箱即用的工作。我认为在此期间进行了一些不兼容的更新。 问题可能是cmd。如果 make 使用 sh 或 bash 作为 shell,那么设置的环境变量不是持久的。 Make 为每个命令使用一个新的 shell,并且该设置只影响 shell 和子 shell,从不影响父 shell。但我认为 cmd 确实有不同的想法,我认为它是全局设置的。告诉 make 使用 sh 作为 shell。 【参考方案1】:

richard 有一个观点 - 有两个不同的 shell 争夺环境变量(更不用说运行 msys),因此每个 shell 都以不同的方式解析自己的环境变量和系统的环境变量。

还要确保在您的用户或系统环境中定义的变量正确编写 - Windows 喜欢“C:\foo\bar”样式的路径,但 Msys 将它们视为“/c/foo/bar”。

【讨论】:

以上是关于为啥 MinGW/MSys 会更改二进制路径?的主要内容,如果未能解决你的问题,请参考以下文章

windows 7下mingw+msys编译ffmpeg

未找到 MinGW msys 包:一般建议如何进行

cmake install() 行为?如果给出此指令,为啥二进制会在 PWD 中查找

为啥只有注释更改的两个程序二进制文件在 gcc 中不完全匹配?

在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw

Mingw+MSYS 中的 libevent 静态编译错误