GCC стоит использовать на Windows для замены MSVC? - PullRequest
55 голосов
/ 06 ноября 2011

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

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

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

  • Может ли он использоваться в качестве замены для замены cl.exe, или же это связано с множеством хаков и проблем совместимости для получения VisualStudio использовать другой компилятор?
  • Основным преимуществом Visual Studio, на мой взгляд, является его отладчик.Это все еще можно использовать, если вы используете другой компилятор?
  • Поскольку GCC происходит из мира * nix и не является родным для Windows, возникают ли проблемы с качеством кода при создании собственных приложений Windows по сравнению с использованием собственного MSVCкомпилятор?(Если это имеет значение: большинство моих проектов - игры.)
  • Другими словами, пострадает ли качество моего скомпилированного exe-файла от использования не-Windows-собственного компилятора?

Ответы [ 7 ]

42 голосов
/ 07 ноября 2011

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

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

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

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

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

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

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

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

10 голосов
/ 14 сентября 2014

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

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

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

7 голосов
/ 06 ноября 2011

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

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

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

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

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

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

1 голос
/ 06 ноября 2011

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

1 голос
/ 06 ноября 2011

Его нельзя использовать как прямую замену для компиляторов Microsoft, для начала у него совершенно другой набор аргументов командной строки и специфических параметров компилятора.

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

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

0 голосов
/ 24 февраля 2018

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

Проблема решена .... Visual Studio 2017 + любая версия MINGW Он имеет Linux, Windows, Android, Raspberry Pi, любой Linux, поддержку плат разработки, Clang intelisense ... Это потрясающе. 30-дневная пробная версия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...