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

3
我将使用Mingw来构建一个C/C++项目。这个项目有超出我的理解范围的makefiles,并依赖于自定义和相当复杂的工具链来编译它。在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中使用bash shell(而不是cmd),从来没有遇到过这样的未解释问题。尝试/usr/bin/find / -mount -print0 | /bin/xargs -0 /bin/grep PATH | /usr/bin/less - ctrl-alt-delor
我没有修改配置文件。仔细检查后,发现make在抱怨makefile修改了路径,并且似乎有Windows风格的路径和Linux风格的路径冲突。再次强调,不久前我刚开始使用时就可以正常工作。我想这期间可能进行了一些不兼容的更新。 - user915495
1
问题可能出在 cmd 上。如果 make 使用 sh 或 bash 作为 shell,则设置的环境变量将不具有持久性。Make 对每个命令使用一个新 shell,而设置只影响该 shell 和子 shell,从不影响父 shell。但我认为 cmd 的做法不同,我认为它会全局设置。告诉 make 使用 sh 作为 shell。 - ctrl-alt-delor
1个回答

2

Richard说得有道理——有两个不同的shell在争夺环境变量(更不用说运行msys了),因此每个shell都以不同的方式解析它自己和系统的环境变量。

此外,请确保您用户或系统环境中定义的变量被正确书写——Windows喜欢"C:\foo\bar"样式的路径,但Msys将其视为"/c/foo/bar"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接