본문 바로가기

Developement/C/C++

MSYS : Windows 에서 리눅스 소스 빌드의 영광을 -

-- 이번엔 어떠한 사진도 없습니다, MSYS  에 사진 따위는 사치 ... (라지만 올릴 사진이 없다는 것이 함정) --


 Windows 는 애시당초 상용 OS 임에도 불구 하고, 자체 어플리케이션을 개발 할 수 있는 컴파일러나 환경을 전혀 지원 하지 않습니다. 일반적으로 Windows 를 단지 "단순한" 용도로만 쓰는 사람들이야 이런 개발환경을 고려 하거나 생각해야 할 부분이 전혀 없습니다만, 조금이나마 "무엇인가를 만들어 보겠다." 라는 창의성을 가진 사람이라면 이런 폐쇠적인 환경이 얼마나 (OS값이라고 지불해야 하는 금액을 생각하면) 불합리하고 오만한 Microsoft 의 환경에 자신이 처해 있는가를 알 수 있습니다.

 혹시나 Visual Studio나 MFC 가 있는데 뭐가 걱정이지요? 하는 질문을 하는 사람이라면 당장 저리 꺼지시길 권장 드립니다. 왜냐구요? 저는 Visual Studio 사용자와 MFC 개발자는 C/C++ 개발자 취급 안합니다.

 MSYS 는 MinGW 프로젝트의 일부로서, Windows 에 최소한의 빌드 환경을 좀 더 완벽히 만들어 주기 위한 훌륭한 콘솔 기반 빌드 시스템 입니다. 이 콘솔기반 빌드 시스템이 왜 필요한지 모르는 경우를 위해, CygWin 을 예로 들겠습니다.


 CygWin 은 UNIX/LINUX 의 BASH 를 windows 에서 에뮬레이션 해 주는 훌륭한 환경 입니다만, 그 용량이 입에서 욕이 나올 정도로 엄청 납니다. 실제 CygWin 을 자신의 컴퓨터에 설치만 해도 기본 5~7GB 는 찍고 시작합니다. 다만 이것은 용량 문제가 아니라 일부 시스템에 따른 종속성이 생기는 문제를 이야기 하고 싶은 것인데, 바로 cygwin1.dll 이 항상 CygWin 에서 빌드했을 경우 따라 다녀야 한다는 것 입니다.

 이 cygwin1.dll 은 CygWin 상의 gcc 에서 빌드시 포함되서 빌드가 되는 문제가 있습니다. 구버젼의 CygWin 에 포함된 gcc 는 -mno-cygwin 이란 빌드 옵션을 지원 했지만, 근래의 CygWin 들은 다음과 같은 메시지를 출력하며 MinGW 를 사용하기를 권장 합니다.


$ gcc -mno-cygwin

gcc: The -mno-cygwin flag has been removed; use a mingw-targeted cross-compiler.


 이러한 이유로 MSYS 는 CygWin 없이 Makefile과, configure 스크립트 등을 구동할 수 있는 가장 이상적인 콘솔 빌드 시스템이라 하겠습니다. ( 혹시 여기서 configure 와 Makefile 에 대한 이해가 없다면, 사실 이 MSYS 에 대한 이 글 자체도 의미가 없습니다. )

 예를 들어 FLTK 1.3.1 소스를 받은 다음 이를 빌드 하려면 ide 내에 VisualC6 나 VisualC2008,2010 등의 폴더 내의 프로젝트 파일을 열면 되겠지만, 이는 Code::Blocks 나 VIM 을 통해서 FLTK 어플리케이션을 만드는 입장이 된다면 엄청난 사치에 불과하단것을 알수 있습니다. ( 일단 Visual ~ 씨리즈를 돈주고 살 능력도, 그러고 싶지도 않은 사람 이라면 더욱이 )

 만약 MSYS 를 설치 한 경우라면 어떨까요 ?

 간단히 MSYS 를 구동 후 FLTK 가 설치된 위치로 이동후, ./configure 를 수행 후, 결과에 이상이 없는지 확인 후 make 를 통해 MinGW 용 object 와 library 를 만들면 그것으로 끝 입니다.

 저는 이 상태에서 FLTK 위치를 Code::Blocks 에 등록을 하거나, 따고 만드는 프로젝트에 FLTK 위치를 참조하여 header 와 lib 위치만 만들어 빌드 하면 그것으로 FLTK 어플리케이션을 만들 수 있게 됩니다.


 이는 Windows 의 Common Control 을 필요로 하거나, GDI+ 와 같은 이미징 프로세서 가 필요하다면 FLTK 가 의미가 없는 부분 이겠지만, 적어도 이런 환경이 Visual Studio 에서 만들어 진다는 것이 개인적으론 낭비가 아닌가 합니다. ( 실제 컴파일러를 구매 해야 하는 금전적인 문제를 고려 한다면 )


 FLTK 를 알기 전 까지는 일일히 CreateWindow() API 나, Dialog() API 를 만들고, 이를 Dialog Callback 에서 받아서 Windows 어플리케이션을 만들어 왔습니다만, 각 플랫폼간 UI 의 이미지나 크기가 동일한 어플리케이션을 만들겠다는 욕심이 서면서 부터는 사실 FLTK 의 가볍고 훌륭한 기본적인 기능들에 감단을 금지 못한 이유도, 이 글을 쓰게 된 원인 입니다.


 Microsoft 에서 밀던 듣보잡이지만 참 이쁘게 UI 를 만들 수 있는 C#과 WPF 조합인가, 아니면 가볍고 빠르고, 여러 플랫폼에서 거의 (아니면 정말 똑같이) 나오는 FLTK 를 선택할 것인가는 각 개발자나, 아키텍쳐의 마음이겠습니다.

 하지만 개발비용대비 결과를 두고 보았을때 과연 어느것이 정말 남는 장사인가? 를 고려 한다면 저는 C# 과 WPF 같은 최악의 조합은 절대 피하지 않을까 합니다. 물론 MFC 는 말할 값어치도 없습니다.


 기본적으로 MSYS 를 사용하려면 UNIX/LINUX 나 BSD 같은 기반의 콘솔에 대한 이해가 필요 하겠습니다만, 황무지 같은 Windows 의 Free / GNU 개발의 환경이 - 얼마나 가뭄에 비 같은 존재 인지는 아는 사람 만이 알겠지만 - 더욱 더 많고 풍성한 Open Source 기반의 작품들을 많이 만들어 내는 그날을 기대 하며, MSYS 찬양을 마쳐 볼까 합니다.


 네, 이 글은 단지 MSYS 와 MinGW 의 (그리고 FLTK의) 찬양글 이었습니다.

 뿅!