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

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

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

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

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

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 намного лучше, что может быть обоюдоострым мечом (потому что это может означать, что часть вашего кода не будет компилироваться на более подходящем компиляторе!), как и поддержка С++ 11.

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

+36
источник

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

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

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

+9
источник

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

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

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

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

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

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

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

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

+1
источник

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

+1
источник

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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос