Programing

MSVC를 대체하기 위해 Windows에서 사용할 가치가있는 GCC?

lottogame 2020. 12. 13. 08:32
반응형

MSVC를 대체하기 위해 Windows에서 사용할 가치가있는 GCC?


저는 현재 Visual Studio 2010을 사용하여 Windows에서 C ++로 개발하고 있습니다. C ++ 11이 공식 발표 된 후 MSVC에서 이미 사용 가능한 일부 기능을 사용하기 시작했습니다. 그러나 예상대로 대부분의 새로운 변경 사항은 지원되지 않습니다.

곧 출시 될 Visual Studio 버전이 이러한 새로운 기능을 추가 할 것이라고 생각했습니다. 그러나 이것을 읽은 후에 는 거의 변하지 않을 것 같습니다.

따라서 이미 대부분의 C ++ 11을 지원하는 것으로 보이므로 MSVC가 아닌 Windows에서 GCC를 사용할 수 있는지 궁금합니다. 내가 말할 수있는 한, 이것은 MinGW를 사용하는 것을 의미 할 것입니다 (다른 기본 Windows 버전의 GCC를 본 적이 없습니다). 그러나 이것이 시도 할 가치가 있는지에 대한 질문이 있습니다.

  • cl.exe의 드롭 인 대체물로 사용할 수 있습니까, 아니면 Visual Studio가 다른 컴파일러를 사용하도록하기 위해 많은 해킹 및 호환성 문제가 수반됩니까?
  • 제 생각에 Visual Studio의 주요 판매 포인트는 디버거입니다. 다른 컴파일러를 사용하는 경우에도 여전히 사용할 수 있습니까?
  • GCC는 * nix 세계에서 왔으며 Windows에 고유하지 않습니다. 네이티브 MSVC 컴파일러를 사용하는 것과 비교하여 네이티브 Windows 응용 프로그램을 만드는 데 코드 품질 문제가 있습니까? (중요한 경우 : 대부분의 프로젝트는 게임입니다.)
  • 즉, Windows 기반이 아닌 컴파일러를 사용하면 컴파일 된 exe의 품질이 저하됩니까?

MSVC는 디버거 지원을 포함하여 Windows에서 동등하지 않은 IDE와 함께 제공된다는 큰 이점이 있습니다.

아마도 MinGW의 가장 좋은 대안은 Code :: Blocks 일 것입니다. 그러나 그 사이에는 특히 코드 완성과 디버거와 관련된 세계가 있습니다.

또한 MSVC를 사용하면 MinGW가 지원하지 않는 일부 독점 Microsoft 항목 (MFC, ATL 및 기타 가능)을 사용할 수 있으며 GDI + 및 DirectX를 더 쉽고 간단하게 사용할 수 있습니다 (MinGW로 둘 다 수행 할 수 있음).

다른 게시물에서 언급했듯이 Cygwin에는 추가 종속성과 가능한 라이센스 문제가 있습니다 (종속성은 GPL이므로 프로그램도 그래야합니다). MinGW에는 이러한 종속성이나 문제가 없습니다.

MinGW는 또한 MSVC보다 훨씬 느리게 컴파일됩니다 (미리 컴파일 된 헤더가 약간 도움이되지만).

그럼에도 불구하고 GCC / MinGW는 전적으로 신뢰할 수있는 품질의 컴파일러이며, 제 생각에는 생성 된 코드의 품질 측면에서 현재 사용 가능한 MSVC 버전보다 성능이 뛰어납니다.
이것은 MSVC의 최신 버전에서는 다소 덜 두드러 지지만 여전히 볼 수 있습니다. 특히 SSE, intrinsics 및 인라인 어셈블리와 관련된 모든 것에 대해 GCC는 그 이후로 MSVC를 완전히 활기차게 해왔습니다 (천천히 따라 잡고 있지만).

표준 준수는 GCC에서도 훨씬 낫습니다. 이것은 C ++ 11 지원과 마찬가지로 양날의 검이 될 수 있습니다 (일부 코드가 더 적합한 컴파일러에서 컴파일되지 않을 수 있음을 의미 할 수 있기 때문입니다!).

MinGW는 선택적으로 DW2 예외도 지원합니다. DW2 예외는 "일반"버전과 완전히 호환되지 않고 실행 파일에서 더 많은 공간을 차지하지만 긍정적 인 측면에서는 런타임에 "실제로 비용이 들지 않습니다".


질문을받은 이후 필드가 변경되었을 수 있으므로 정보를 추가하고 싶습니다.

MSVC에서 전환 할 때의 주요 문제는 MinGW와 완벽하게 통합되는 좋은 IDE가 없다는 것입니다. Visual Studio는 매우 강력한 도구이며 오랫동안 Windows에서 유일한 플레이어였습니다. 그러나 Jetbrains는 며칠 전에 새로운 C ++ IDE CLion의 미리보기 버전을 출시했습니다.

크로스 플랫폼 애플리케이션에서 작업 할 때 주요 이점이 있습니다. 이 경우 GCC 기반 도구 체인은 삶을 훨씬 더 쉽게 만들 수 있습니다. 또한 CLion은 CMake와 좁게 통합되므로 Visual Studio에 비해 큰 장점입니다. 따라서 제 생각에는 지금 MinGW로 전환하는 것을 고려할 가치가 있습니다.


GCC의 C ++ 11 지원은 매우 경이 롭습니다 (이제 <regex>구현 된 표준 준수와 동등 함 ).

컴파일러를 교체하는 경우 새 컴파일러로 모든 종속성을 빌드 할 수 있는지 확인해야합니다. 그것들은 대체 가능한 플러그인으로 만들어지지 않았습니다 ( Clang이 그렇게되기 위해 노력하고 있지만 ).

GCC는 훌륭한 컴파일러이며 MSVC와 거의 동일한 성능을 가진 코드를 생성 할 수 있습니다. 그러나 일부 저수준 Windows 관련 기능이 없습니다.

이 외에도 귀하의 질문에 답하려면 :

  1. VS가 GCC를 컴파일러로 사용하도록하려면 makefile 또는 사용자 지정 빌드 단계로 전환해야합니다. 명령 줄에서 컴파일하고 CMake 또는 이와 유사한 것을 사용하는 것이 훨씬 낫습니다.
  2. GCC 코드에는 VS 디버거를 사용할 수 없습니다. GCC는 GDB 호환 디버그 정보를 출력하고 VS 디버그 형식은 독점적이므로 해당 영역에서 조만간 변경되는 사항이 없습니다.
  3. 코드 품질은 원하는만큼 좋습니다. 위 참조.
  4. 아니요, GCC는 MSVC가 숨길 것이라고 가정하는 몇 가지 표준 확장을 지적하므로 코드의 품질이 실제로 향상됩니다. 모든 자존심이 강한 오픈 소스 프로젝트는 GCC로 컴파일 할 수 있습니다.

마이크로 소프트 컴파일러를위한 직접적인 스왑 아웃 대체물로 사용할 수 없습니다. 처음에는 매우 다른 명령 줄 인수와 컴파일러 특정 옵션이 있습니다.

MinGW 또는 Cygwin을 사용하여 소프트웨어를 작성할 수 있지만 추가 종속성을 도입 할 수 있습니다 (특히 cygwin의 경우).

cl에 비해 gcc의 장점 중 하나는 gcc를 ccache와 함께 사용하여 재 빌드 속도를 크게 높이거나 distcc를 컴파일러 슬레이브로 사용하여 빌드 할 수 있다는 것입니다.


다른 옵션으로 인텔 컴파일러 (또는 "Composer"라고 부르는 것처럼 보임)를 고려하십시오. MS와 비교할 때 C ++ 11 지원이 어디에 있는지 잘 모르겠지만 (확실히 람다가 있음) VisualStudio와 매우 잘 통합됩니다 (예 : 솔루션 내의 다른 프로젝트에서 Intel 또는 MS 컴파일러를 사용할 수 있음). 또한 MS 컴파일러 명령 줄 옵션과 일치시키기 위해 노력했습니다.


GCC와 MSVC는 C ++에 대해 서로 다른 이름 맹 글링 규칙을 사용합니다. 한 컴파일러로 컴파일 된 C ++ dll은 다른 컴파일러로 컴파일 된 응용 프로그램에서 사용할 수 없습니다. 이것이 우리가 Windows에서 gcc가 더 널리 사용되지 않는 주된 이유라고 생각합니다.


visualGDB Visual studio 2017 플러그인을 사용하십시오. 모든 밍 그향을 사용할 수 있습니다. 64/32 비트 ext TDM-GCC-64 (posix), SysGCC (mingw 64), MinGw

문제 해결 .... visual studio 2017 + 모든 종류의 mingw 버전 Linux, Windows, Android, Raspberry Pi, 모든 Linux, 개발 보드 지원, Clang intelisense ... 놀랍습니다. 30 일 평가판.

참고 URL : https://stackoverflow.com/questions/8029092/gcc-worth-using-on-windows-to-replace-msvc

반응형