我如何阻止 MSYS 转换我的编译器选项?

我如何阻止 MSYS 转换我的编译器选项?

有没有办法阻止 MSYS/MinGW 转换它认为是命令行上的路径?我有一个使用nmakeMicrosoft 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

最终答案是,实际上没有办法阻止这种行为。我不得不检查构建系统中的每一行,并将每一行都更改/-

相关内容