GCC值得在Windows上用来取代MSVC?

Nai*_*rou 59 c++ windows gcc visual-c++ c++11

我目前使用Visual Studio 2010在Windows上使用C++进行开发.在C++ 11正式发布之后,我开始使用MSVC中已有的一些功能.但是,正如预期的那样,绝大多数新变化都不受支持.

我想也许即将推出的Visual Studio版本会添加这些新功能.然而,看完之后看起来很少会改变.

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

  • 它可以用作cl.exe的替代品,还是会涉及很多黑客和兼容性问题,以使Visual Studio使用不同的编译器?
  • 在我看来,Visual Studio的主要卖点是它的调试器.如果您使用不同的编译器,它仍然可用吗?
  • 由于GCC来自*nix世界,并且不是Windows原生的,与使用本机MSVC编译器相比,创建本机Windows应用程序是否存在代码质量问题?(如果重要的话:我的大部分项目都是游戏.)
  • 换句话说,我编译的exe的质量是否会受到使用非Windows本机编译器的影响?

Dam*_*mon 49

MSVC具有巨大的优势,即在Windows下无法使用IDE,包括调试器支持.

MinGW最可能的替代方案是Code :: Blocks,但介于两者之间,特别是在代码完成和调试器方面.

此外,MSVC允许您使用MinGW不支持的一些专有的Microsoft内容(MFC,ATL,以及可能的其他内容),并且使得使用GDI +和DirectX更容易和更直接(尽管可以同时使用MinGW).

正如另一篇文章中提到的,Cygwin将具有额外的依赖性和可能的​​许可证问题(依赖性是GPL,因此您的程序也必须如此).MinGW没有任何此类依赖性或问题.

MinGW的编译速度也明显慢于MSVC(虽然预编译的头文件有点帮助).

尽管如此,GCC/MinGW是一个完全可靠的高质量编译器,在我看来,它在生成代码的质量方面优于任何迄今为止的MSVC版本.
对于最新版本的MSVC,这有点不太明显,但仍然可见.特别是对于与SSE,内在函数和内联汇编相关的任何事情,GCC从那时起就完全消除了MSVC(尽管它们正在慢慢追赶).

GCC中的标准合规性也要好得多,这可能是一把双刃剑(因为它可能意味着你的一些代码不会在更合格的编译器上编译!),就像C++ 11支持一样.

MinGW还可选择支持DW2异常,这些异常与"普通"风格完全不兼容,并在可执行文件中占用更多空间,但从积极的方面来说,在运行时"实际上是零成本".

  • 我没有检查过一段时间,所以我可能错了,但上次我检查代码:: blocks并没有真正说服我.就个人而言,我会建议使用Eclipse CDT,或者使用过多资源QTCreator进行mingw开发 (13认同)
  • @Nairou:作为Linux开发人员,只为自己说话:我不使用IDE.命令行工具功能强大,与C#或Java等语言相比,C++并不适用于IDE. (8认同)
  • 虽然Eclipse已经完成了更好的代码完成,但它的重量也只有20倍,并且需要10倍的启动时间等等.它在200万个构建选项中可能更强大,尽管个人认为这比让我感到困惑.我想这是个人品味的问题(另外,我可能有点不公平地偏向Code :: Blocks).但果然,Eclipse可能是一个可行的选择. (5认同)
  • 这就是我一直得到的印象......结果应用程序会很棒,但与MSVC提供的相比,开发过程将大大减少.让我想知道Linux开发人员如何管理! (3认同)
  • 那很好笑; 在我尝试过的少数几个项目中,Mingw编译速度更快,结果代码运行得更快 - 尽管代码正在使用MSC进行分析和优化(即调整为MSC而不是gcc). (3认同)
  • **更新:**我相信[CLion](https://www.jetbrains.com/clion/)具有现代设计,丰富的功能和CMake集成,因此值得成为"Windows上最好的非MSVC IDE" ".它也更积极地维护. (3认同)
  • @Nairou*让我想知道Linux开发人员如何管理!* - Linux开发人员通常使用某种Vim/Emacs.当你对它感到满意时,这很棒.有人也提到过IDE QtCreator.最近我通过VirtualBox使用VS2010,我想知道它是如何瘫痪的.虽然为了移动我找到了VsVim插件,但它的调试器仍然比gdb差很多.即我无法在Visual Studio中设置断点以在代码中的某处设置*临时*中断,并继续.此外,我没有设法找到打破记忆区域的命令......许多事情都不符合评论. (2认同)

dan*_*jar 12

我想添加一些信息,因为自提出问题以来该字段可能已更改.

切换到MSVC的主要问题是缺乏与MinGW完美集成的良好IDE.Visual Studio是一个非常强大的工具,并且是Windows上唯一一段时间的播放器.然而,Jetbrains几天前发布了他们的新C++ IDE CLion的预览版本.

在处理跨平台应用程序时,主要的好处是.在这种情况下,基于GCC的工具链可以使生活更轻松.此外,CLion与CMake紧密集成,与Visual Studio相比,这也是一个很大的优势.因此,在我看来,现在考虑切换到MinGW是值得的.

  • 仍然没有一个像MSVS一样具有相同稳定性和支持的优秀IDE,CLion也无法发挥同样的作用(它充满了错误,使用GDB进行调试是一场噩梦)。 (2认同)

rub*_*nvb 7

GCC的C++ 11支持是非常惊人的(并且完全符合标准一致性,现在<regex>已经实现).

如果更换编译器,则需要确保可以使用新编译器构建每个依赖项.它们不是可替代的插件(虽然Clang正在努力成为这种方式).

GCC是一个很好的编译器,可以生成与MSVC具有几乎相同性能的代码,如果不是更好的话.它缺少一些低级别的Windows特性.

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

  1. 要让VS使用GCC作为编译器,您几乎需要转向makefile或自定义构建步骤.从命令行编译并使用CMake或类似的东西你会好得多.
  2. 您不能将VS调试器用于GCC代码.GCC输出GDB兼容的调试信息,VS调试格式是专有的,因此该区域不会很快发生任何变化.
  3. 代码质量与您想要的一样好.往上看.
  4. 不,代码的质量实际上会增加,因为GCC会指出MSVC会隐藏的几个假定的标准扩展.所有自尊的开源项目都可以通过GCC编译.