关于c ++:GCC值得在Windows上用来取代MSVC?

GCC worth using on Windows to replace MSVC?

我现在在Windows上使用Visual Studio 2010开发C++。在正式宣布C++ 11之后,我已经开始使用一些已经在MSVC中可用的特性。但是,正如预期的那样,绝大多数的新变化都不受支持。

我想也许即将到来的Visual Studio版本会添加这些新功能。然而,在阅读了这篇文章之后,看起来几乎没有什么变化。

因此,我很好奇在Windows上使用GCC而不是MSVC的可行性,因为它似乎已经支持了绝大多数C++ 11。据我所知,这意味着使用mingw(我没有看到任何其他本地的gcc Windows版本)。但我有疑问,这是否值得尝试:

  • 它是否可以作为cl.exe的嵌入式替代品,或者它是否会涉及许多黑客和兼容性问题,以使Visual Studio使用不同的编译器?
  • 在我看来,Visual Studio的主要卖点是它是调试器。如果使用不同的编译器,它是否仍然可用?
  • 由于gcc来自*nix世界,而不是Windows的本机版本,与使用本机MSVC编译器相比,创建本机Windows应用程序是否存在代码质量问题?(如果重要的话:我的大多数项目都是游戏。)
  • 换句话说,使用非Windows本机编译器会影响编译后的exe的质量吗?


MSVC有一个巨大的优势,那就是它在Windows下拥有一个无与伦比的IDE,包括调试器支持。

对于mingw,最好的选择可能是code::blocks,但是两者之间存在着一些世界,特别是关于代码完成和调试器。

此外,MSVC还允许您使用Mingw不支持的一些专有的Microsoft产品(MFC、ATL,以及可能的其他产品),并使使用GDI+和DirectX变得更容易和更简单(尽管可以同时使用Mingw)。

正如另一篇文章中提到的,Cygwin将具有额外的依赖关系和可能的许可证问题(依赖关系是GPL,所以您的程序也必须是GPL)。明威没有这种依赖或问题。

mingw的编译速度也明显低于msvc(尽管预编译头有点帮助)。

尽管如此,gcc/mingw是一个完全可靠的质量编译器,在我看来,它在生成代码的质量方面优于任何现有的MSVC版本。这在最新版本的MSVC中不太明显,但仍然可见。特别是对于与SSE、Intrinsics和内联汇编相关的任何内容,GCC从那时起就完全支持MSVC(尽管它们正在慢慢跟上)。

GCC中的标准遵从性也要好得多,这可能是一把双刃剑(因为这可能意味着某些代码无法在更符合标准的编译器上编译!),就像C++ 11的支持一样。

mingw还可选地支持dw2异常,这些异常与"正常"风格完全不兼容,并在可执行文件中占用更多空间,但在积极方面,运行时"几乎为零成本"。


我想添加一些信息,因为该字段可能在问题提出后发生了更改。

从MSVC转换的主要问题是缺少一个完美地与Mingw集成的好的IDE。Visual Studio是一个非常强大的工具,在相当长一段时间内是Windows上唯一的播放器。然而,JeTebug在几天前发布了他们新的C++ IDE CyLee的预览版本。

主要的好处是在跨平台应用程序上工作。在这种情况下,基于GCC的工具链可以使生活更容易。此外,与Visual Studio相比,Clion还与CMake进行了狭隘的集成,这也是一个很大的优势。因此,在我看来,现在就有必要考虑改用明格。


GCC的C++ 11支持是非常惊人的(并且与标准一致性相当高,现在已经实现了EDCOX1×0)。

如果替换编译器,则需要确保每个依赖项都可以用新编译器构建。它们并不是用来替代插件的(尽管Clang正在努力做到这一点)。

gcc是一个很好的编译器,它可以生成与msvc性能几乎相同(如果不是更好的话)的代码。但它缺少一些特定于Windows的低级功能。

除此之外,回答您的问题:

  • 要让vs使用gcc作为编译器,您几乎需要一直使用makefiles或自定义构建步骤。您最好从命令行编译并使用cmake或类似的工具。
  • 不能将vs调试器用于gcc代码。GCC输出与gdb兼容的调试信息,而vs调试格式是专有的,因此在该领域不会很快发生任何变化。
  • 代码质量和您想要的一样好。见上文。
  • 不,代码的质量实际上会提高,正如GCC指出的那样,MSVC会对您隐藏一些假定的标准扩展。所有自尊心强的开源项目都可以用gcc编译。

  • GCC和MSVC使用不同的C++命名规则。由一个编译器编译的C++ DLL不能在与其他编译器编译的应用程序中使用。我认为这是我们没有看到在Windows中更广泛地使用gcc的主要原因。


    把英特尔编译器(或他们似乎已经习惯称之为"作曲家")作为另一个选项。我不太确定它的C++ 11支持在哪里与MS相比(当然它有lambdas),但是它确实与VisualStudio集成得很好(例如,在一个解决方案中的不同项目可以使用英特尔或MS编译器),并且还做出了一些努力来匹配MS编译器命令行选项。


    它不能作为微软编译器的直接交换替代品,首先它有一组截然不同的命令行参数和编译器特定的选项。

    您可以使用mingw或cygwin编写软件,但引入额外的依赖项(尤其是在cygwin的情况下)。

    gcc相对于cl的一个不常被吹捧的优点是,gcc可以与ccache一起使用,以极大地加快重建或distcc的速度,从而使用其他几台机器作为编译器的从属机器来构建。


    只需使用VisualGDB Visual Studio 2017插件。它可以用任何混合的味道。64/32位ext tdm-gcc-64(posix)、sysgcc(mingw 64)、mingw

    解决问题……Visual Studio 2017+任何类型的mingw版本它有linux,windows,android,raspberry pi,任何linux,开发板支持,clang intelisense…太神奇了。30天试验。