有没有办法阻止 MSYS/MinGW 转换它认为是命令行上的路径?我有一个使用nmake
Microsoft Visual Studio 2003 的项目(yeecccch)。我已经将构建系统全部移植并准备好用于 GNU make
(并使用 Cygwin 进行了测试)。但是,当我尝试在 MSYS 环境中进行编译时,我的编译器标志发生了一些奇怪的事情。这是一个简化的示例:
$ cl /nologo
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
/out:nologo.exe
C:/msys/1.0/nologo
LINK : fatal error LNK1181: cannot open input file 'C:/msys/1.0/nologo.obj'
如您所见,MSYS 正在将/nologo
编译器开关转换为 Windows 路径,然后将其发送给编译器。我真的不希望发生这种情况 - 事实上,如果 MSYS 从未转换任何路径,我会很高兴 - 当我第一次移植到 Cygwin 时,我的构建系统必须处理所有这些问题。有没有办法实现这一点?
将命令更改为
$ cl -nologo
这会产生预期的结果,但是这个构建系统非常庞大,更新起来非常麻烦。我真的不想每次使用 a/
标志时都要将其更改为-
。特别是,可能有些工具根本不支持使用-
,然后我就真的陷入困境了。
谢谢您的任何建议!
答案1
我在寻找一种运行需要以下形式参数的 Windows 程序的方法时发现了这个问题:
/arg:<path>
其中路径必须是完全限定的 Windows 路径
我只是想从原始问题的角度详细阐述以下内容:
将命令更改为
cl -nologo
这会产生预期的结果....特别是,可能有些工具根本不支持使用-,然后我就真的陷入困境了。
正如原始海报所建议的那样,使用 - 转换论点如下,效果很好:
-arg:<path>
我对此感到非常惊讶,因为程序帮助中没有记录这一点。碰巧的是,本例中的程序也是由微软制作的(原始发帖人的情况也是如此)。因此,如果您尝试运行的程序是由微软制作的,即使没有记录,也请尝试一下。
希望没有任何程序在 Microsoft 之外使用这种(在我看来很疯狂的)形式的命令行参数,如果有的话,我认为不可能用 MSYS 运行它们
答案2
最终答案是,实际上没有办法阻止这种行为。我不得不检查构建系统中的每一行,并将每一行都更改/
为-
。