GCC值得在Windows上使用,以取代MSVC?
我目前使用Visual Studio 2010在Windows上使用C ++进行开发。在官方发布C ++ 11之后,我已经开始使用MSVC中已有的一些function。 但是,正如所料,绝大多数新的变化都不被支持。
我想也许即将到来的Visual Studio版本将添加这些新function。 然而,看完这个后 ,看起来很less有变化。
所以,我很好奇在Windows上使用GCC而不是MSVC的可行性,因为它似乎已经支持绝大多数C ++ 11。 据我所知,这意味着使用MinGW(我还没有看到任何其他本地Windows版本的GCC)。 但是我有疑问这是否值得尝试:
- 它可以用作cl.exe的替代品,还是会涉及很多黑客和兼容性问题,让Visual Studio使用不同的编译器?
- Visual Studio的主要卖点在我看来是它的debugging器。 如果你使用不同的编译器,这仍然可用吗?
- 由于GCC来自* nix世界,而不是Windows原生的,与使用本地MSVC编译器相比,创build本机Windows应用程序时是否存在代码质量问题? (如果重要的话,我的大部分项目都是游戏)
- 换句话说,我编译的exe的质量会受到使用非Windows本地编译器的影响吗?
MSVC有一个与Windows下没有等同的IDE的巨大优势,包括debugging器的支持。
MinGW可能是最好的替代scheme是Code :: Blocks,但是还有其他的世界,特别是代码完成和debugging器。
此外,MSVC允许您使用MinGW不支持的一些专有Microsoft(MFC,ATL和其他可能的)东西,并使得使用GDI +和DirectX更简单,更直接(尽pipeMinGW可以同时使用)。
如另一篇文章中提到的,Cygwin将会有额外的依赖和可能的许可问题(依赖是GPL,所以你的程序也必须这样做)。 MinGW没有任何这样的依赖或问题。
MinGW编译速度比MSVC慢得多(尽pipe预编译头文件有一点帮助)。
尽pipe如此,GCC / MinGW是一个完全可靠的质量编译器,在我看来,在生成的代码质量方面,它的性能优于MSVC的可用版本。
这与最新版本的MSVC不太明显,但仍然可见。 特别是对于与SSE,内部函数和内联汇编相关的任何事情来说,GCC自从(尽pipe它们正在慢慢赶上)已经完全无益于MSVC。
GCC中的标准符合性要好得多,这可以是一把双刃剑(因为它可能意味着你的一些代码不会在更符合要求的编译器上编译!),就像C ++ 11的支持一样。
MinGW还支持DW2exception,这与“正常”风格完全不兼容,在可执行文件中占用更多空间,但积极的一面是在运行时“实际上是零成本”。
我想添加一些信息,因为问题提出后字段可能已经改变了。
从MSVC切换的主要问题是缺乏一个完美的IDE与MinGW完美整合。 Visual Studio是一个非常强大的工具,并且在Windows上是唯一一个相当长的时间。 不过,Jetbrains前几天发布了新版C ++ IDE CLion的预览版。
在跨平台应用程序上工作时主要受益。 在这种情况下,基于GCC的工具链可以使生活变得更容易。 而且,CLion与CMake很窄的整合,与Visual Studio相比也是一个很大的优势。 所以在我看来,现在考虑切换到MinGW是值得的。
GCC的C ++ 11支持是相当惊人的(现在已经实现了<regex>
),与标准一致。
如果你replace你的编译器,你需要确保每个依赖项都可以用这个新的编译器来编译。 它们并不是可replace的插件(尽pipeClang正在努力成为这种方式 )。
GCC是一个很好的编译器,并且可以生成与MSVC几乎相同的性能的代码(如果不是更好的话)。 它缺less一些低级的特定于Windows的function。
除此之外,回答你的问题:
- 为了让VS使用GCC作为编译器,你几乎需要转向makefile或者自定义的构build步骤。 从命令行编译和使用CMake或类似的东西你会好得多。
- 你不能使用VSdebugging器的GCC代码。 GCC输出与GDB兼容的debugging信息,并且VSdebugging格式是专有的,所以不会很快在那个区域改变。
- 代码质量就像你想要的一样好。 往上看。
- 不,你的代码的质量实际上会增加,因为GCC会指出几个假定的标准扩展,MSVC会隐藏你的。 所有自尊的开源项目都可以用GCC编译。
它不能被用作微软编译器的直接换出replace,一开始它有一组完全不同的命令行参数和编译器特定的选项。
你可以使用MinGW或者Cygwin编写软件,但是引入额外的依赖(特别是在cygwin的情况下)。
一个经常被吹捧为gcc优于cl的优点是,gcc可以和ccache一起使用来大幅加速重build,或者使用其他几台机器作为编译器从站来构builddistcc。
考虑英特尔编译器(或者他们似乎称之为“composer php”)作为另一种select。 我不太确定它的C ++ 11支持与MS相比(当然它有lambdaexpression式),但它很好地与VisualStudio集成(例如,解决scheme中的不同项目可以使用Intel或MS编译器)也做了一些努力来匹配MS编译器的命令行选项。
对于C ++,GCC和MSVC使用不同的名称约束约定。 由一个编译器编译的C ++ dll不能用于其他编译的应用程序。 我相信这是我们没有看到在Windows中更广泛地使用gcc的主要原因。