GCC стоит использовать в Windows для замены MSVC?


в настоящее время я разрабатываю в C++ на Windows, используя Visual Studio 2010. После официального анонса C++11, я начал использовать некоторые из его функций, которые уже доступны в MSVC. Но, как и ожидалось, подавляющее большинство новых изменений не поддерживаются.

Я подумал, что, возможно, предстоящая версия Visual Studio добавит эти новые функции. Однако, после прочтения этой похоже, что очень мало изменится.

и так, мне интересно о целесообразности использования GCC в Windows, а не MSVC, поскольку он, по-видимому, уже поддерживает подавляющее большинство C++11. Насколько я могу судить, это будет означать использование MinGW (я не видел никаких других собственных версий Windows GCC). Но у меня есть вопросы о том, стоит ли это попробовать:

  • можно ли его использовать в качестве замены для CL.exe, или это будет связано с большим количеством хаков и проблем совместимости, чтобы заставить Visual Studio использовать другой компилятор?
  • основной пункт продажи для Visual Studio, на мой взгляд, это отладчик. Что еще можно использовать, если вы используете другой компилятор?
  • поскольку GCC исходит из мира *nix и не является родным для Windows, существуют ли проблемы с качеством кода при создании собственных приложений Windows по сравнению с использованием собственного компилятора MSVC? (Если это имеет значение: Большинство моих проектов-игры.)
  • другими словами, Будет ли качество моих скомпилированных exe-файлов страдать от использования не Windows-родной компилятор?
7   51  

7 ответов:

MSVC имеет огромное преимущество в том, что поставляется с IDE, которая не имеет равных под Windows, включая поддержку отладчика.

вероятно, лучшей альтернативой для MinGW будет Code:: Blocks, но между ними есть миры, особенно в отношении завершения кода и отладчика.

кроме того, MSVC позволяет использовать некоторые собственные материалы Microsoft (MFC, ATL и, возможно, другие), которые MinGW не поддерживает, и делает использование GDI+ и DirectX проще и проще (хотя это можно сделать и с MinGW).

Cygwin, как упоминалось в другом сообщении, будет иметь дополнительные зависимости и возможные проблемы с лицензией (зависимость-GPL, поэтому ваши программы тоже должны быть). MinGW не имеет такой зависимости или проблемы.

компилятор MinGW компилирует значительно медленнее, чем MSVC (хотя предварительно скомпилированные заголовки немного помогают).

несмотря на все это, GCC/MinGW является полностью надежным компилятором качества, который в моем мнение превосходит любую на сегодняшний день доступную версию MSVC по качеству сгенерированного кода.
Это несколько менее выражено с самыми последними версиями MSVC, но все еще видно. Особенно для всего, что связано с SSE, intrinsics и встроенной сборкой, GCC с тех пор полностью анихилирует MSVC (хотя они медленно догоняют).

соответствие стандартам намного лучше в GCC тоже, что может быть обоюдоострым мечом (потому что это может означать, что некоторые из ваших код не будет компилироваться на более соответствующем компиляторе!), как поддержка C++11.

MinGW дополнительно также поддерживает исключения DW2, которые полностью несовместимы с "нормальным" вкусом и занимают больше места в исполняемом файле, но с положительной стороны являются "практически нулевой стоимостью" во время выполнения.

Я хочу добавить некоторую информацию, потому что поле, возможно, изменилось с тех пор, как был задан вопрос.

основной проблемой для переключения с MSVC было отсутствие хорошей IDE, которая безупречно интегрируется с MinGW . Visual Studio является очень мощным инструментом и был единственным игроком на Windows в течение довольно долгого времени. Тем не менее, Jetbrains выпустили предварительную версию своего нового C++ IDE CLion несколько дней назад.

главные преимущества при работе на кросс-платформенный приложения. В этом случае цепочка инструментов на основе GCC может значительно облегчить жизнь. Кроме того, CLion узко интегрируется с CMake, что также является большим плюсом по сравнению с Visual Studio. Поэтому, на мой взгляд, сейчас стоит подумать о переходе на MinGW.

поддержка C++11 GCC довольно феноменальна (и вполне соответствует стандартам соответствия, теперь это <regex> была реализована).

Если вы замените свой компилятор, вам нужно будет убедиться, что каждая зависимость может быть построена с помощью этого нового компилятора. Они не предназначены для замены плагинов (хотя Clang работает над тем, чтобы стать таким образом).

GCC является прекрасным компилятором и может создавать код, который имеет почти такую же производительность, если не лучше, чем MSVC. Однако в нем отсутствуют некоторые низкоуровневые функции Windows.

кроме того, чтобы ответить на ваши вопросы:

  1. чтобы заставить VS использовать GCC в качестве компилятора, вам в значительной степени нужно будет полностью перейти к makefiles или пользовательским шагам сборки. Вам было бы намного лучше компилировать из командной строки и использовать CMake или что-то подобное.
  2. вы не можете использовать отладчик VS для кода GCC. GCC выводит отладочную информацию, совместимую с GDB, и отладку VS формат-проприетарный, так что ничего не изменится в этой области в ближайшее время.
  3. качество кода так же хорошо, как вы хотели его. Смотреть выше.
  4. нет, качество вашего кода на самом деле увеличится, так как GCC укажет на несколько предполагаемых стандартных расширений, которые MSVC будет скрывать от вас. Все уважающие себя проекты с открытым исходным кодом могут быть скомпилированы с помощью GCC.

Он не может быть использован в качестве прямой замены подкачки для компиляторов microsoft, для начала он имеет совершенно другой набор аргументов командной строки и конкретных параметров компилятора.

вы можете использовать MinGW или Cygwin для написания программного обеспечения, но вводить дополнительные зависимости ( особенно в случае cygwin ).

одно не часто рекламируемое преимущество gcc над cl заключается в том, что gcc можно использовать с ccache для резкого ускорения перестроений или distcc для сборки с использованием нескольких другие машины в качестве подчиненных компилятора.

рассмотрим компилятор Intel (или "композитор", как они, кажется, приняли его называть) в качестве другого варианта. Я не слишком уверен, где его поддержка C++11 по сравнению с MS (конечно, у него есть lambdas), но он очень хорошо интегрируется с VisualStudio (например, различные проекты в решении могут использовать компиляторы Intel или MS), а также были предприняты некоторые усилия, чтобы соответствовать параметрам командной строки компилятора MS.

GCC и MSVC используют разные соглашения об искажении имен для C++. Библиотеки DLL C++, скомпилированные одним компилятором, не могут использоваться в приложениях, скомпилированных с другим. Я считаю, что это основная причина, по которой мы не видим более широкого использования gcc в windows.

просто используйте плагин visualGDB Visual studio 2017. Он может использовать любой вкус mingw. 64/32 бит ext TDM-GCC-64 (posix) , SysGCC(mingw 64), MinGw

sovled .... визуальная студия 2017 + какой-либо помощью MinGW версии Он имеет Linux, Windows, Android, Raspberry Pi, любой Linux, поддержку плат разработки, Clang intelisense ... Это удивительно . 30 пробных дней .