윈폼 프로그램을 맥, 리눅스에서 빌드하기(?!)

마이크로소프트가 오픈소스 프로젝트를 진행하면서 모노(Mono)를 이용한 크로스플랫폼 지원한다는 이야기를 많이 들었을 것이다. 사실 모노로 가지고 그대로 개발한다면서 Gtk#을 이용하고 하는 사람들도 있고, Xamarin을 결재해서 하는 사람들도 많다.

근데 기존에 Visual Studio를 통해 개발했던 프로젝트들, 특히 윈폼 프로젝트의 경우에는 코드 변환을 해야 하는지 그대로 이용해야 하는지 모르는 사람들이 많다. 국내에서 아직 Mono를 많이 쓰는 걸 본 적이 없어서 그런지 정보도 별로 없다. 있어도 대부분 모바일 크로스플랫폼을 위해 이용하던 방법들이 많고…

게다가 전에 윈도우 프로그래밍을 하라고 했을 때에도 “그럼 맥용, 리눅스용 따로 만들어야되요?” 라고 질문도 받긴 했다. (사실 자바 쓰면 그럴 일 없겠지만… 개발에 환경설정에 이런 저런 시간 좀 더 덜쓰는 쪽을 먼저 알려주고 싶었을 뿐이었고, 실제로도 쓸 수 있는 걸 보여주고 싶으니깐.)

간단하다 xbuild 명령어를 통해 직접 빌드를 진행하면 된다.

스크린샷 2016-03-10 오후 12.57.54

*주의: xbuild의 경우에는 make와 같은 빌드 명령처럼 쓰이기 때문에 모노를 전체 설치한 경우에 이용하기 쉽다. 맥의 경우에는 pkg를 통해서 설치했으면 별 문제 없겠지만, 리눅스의 경우에는 만약 전체 설치 안되어있다면 전체 설치를 권장한다.

사용법을 맥북에서 녹화해서 직접 유튜브에 올렸다.

실행 동영상

이로써 맥, 리눅스에서 이용할 수 있는 방법을 공유했다. 단, 이걸로도 지원이 안되는 부분이 있다.

  • 프로젝트 내부에 있는 COM 레퍼런스 파일들은 무시된다.
  • VC++, vdproj(Setup and Deployment) 프로젝트의 경우에는 지원되지 않는다.

즉, 간단하게 보면 C#으로 짠 프로그램에 한해서만 보면 된다. 자세한 내용은 아래의 링크 주소를 통해서 확인할 수 있다.

http://www.mono-project.com/docs/tools+libraries/tools/xbuild/

윈도우 프로그래밍은 꼭 정품 비주얼 스튜디오를 써야 하나?

http://www.visualstudio.com/ko-kr/products/visual-studio-express-vs

비주얼 스튜디오 익스프레스를 MS에서 제공해 주고 있습니다. MS는 자사의 익스프레스 제품을 통해 개발할 때 자신들의 익스프레스 제품을 이용하여 자유롭게 개발을 해볼 수 있도록 지원해 주고 있죠.

근데 이게 골때립니다. 상용 비주얼 스튜디오가 상당히 비싸기 때문에 회사에서 익스프레스로 개발해서 쓰는 상황을 볼 때가 있긴 합니다. (대놓고 익스프레스로만 개발하라는 사장도 있습니다. 진짜로)

그래서… 무지하게 관련 내용을 뒤져본 적이 있습니다. 일단 결론부터 적겠습니다.

결론: 회사에서 프로그램 창작을 할 때 익스프레스 버전을 사용해도 되나, 익스프레스로 개발한 프로그램을 회사에서 상업적 용도로 배포할 수는 없다.

MS랑 상의하던가 MSDN 구독해 주세요. ㅡㅅㅡ 소규모 기업이면 아마 싸게 지원해 주는 것도 있는 걸로 알고있습니다.

그러나, 자유로운 창작을 위해 써도 된다는 건 공부할 때 써도 된다는 내용입니다. ㅇㅅㅇ 공부할 땐 라이센스 제약 덜받는 익스프레스 버전 써주세요. 그게 나중에 본인한테 피해 덜받는 방법입니다. MS는 상당히 라이센스에 민감한 기업입니다.

갑자기 뜬금없이 이 글을 왜 썼냐고 물으실텐데… 제가 예~전에 C#과 닷넷 공부할 때, 몇몇 영문 사이트에서 알려준 방법이 한국에서는 아직 들어오진 않았는데, 그 내용 보고 질문하는 사람 생길까봐서 그렇습니다.

익스프레스 버전을 받고, 그 안에 같이 설치되어 나오는 CSC(C# Compiler)를 가지고 커멘드 라인에서 컴파일해서 공부하는 방법을 써놓은 글들이 상당히 많습니다. 저게 어디까지 가냐면요… 메모장으로 코딩해서 프로그램 뚝딱 짜놓고 릴리즈 판으로 빌드까지 완전히 끝내는 방법도 나옵니다. 그걸로 멋대로 배포하는 글도 있긴 한데.. 지금은 찾기 힘들군요.

근데 중요한 건, 저건 그냥 지인들끼리 잠깐 돌리고 하는 방법으로 쓰는 것 중 하나일 뿐입니다. 아님 단순히 이렇게도 쓸 수 있다고 알려주는 용도이거나요. ㅡㅅㅡ (여러분이 찰스 페졸드 아저씨처럼 MSDN의 모든 내용을 다 머릿속에 넣어두고 있다면 그렇게 프로그래밍 해도 됩니다만 그래도 상업 배포는 안됩니다. ㅇㅅㅇ) 실제로 돈을 받고 배포할 목적이라면 비주얼 스튜디오 정품을 구하시거나 MSDN을 구독하세요.

p.s. 규링도 MSDN 구독중입니다.

CTS, CLS에 대한 부가적 설명

CTS, CLS에 대한 설명을 하긴 했습니다만 이해가 잘 안가실 겁니다.(저도 잘 안갔습니다) 그래서 관계도를 올립니다.

CTS CLS 관계도

CLS는 개발자가 짜는 프로그래밍 언어가 어떤 것이던 간에 닷넷에서 동작하기 위한 최소한의 규약을 나타내는 것입니다. 이 부분에 대해서는 MS C++, C#, VB.NET을 배울 때 공통적으로 가르치는 부분입니다. 당연히 C++, VB, C#의 순수한 언어적인 측면을 배울 때는 눈에 띄지 않는 부분입니다. 스스로 직접 윈도우 환경에서 동작하는 프로그래밍을 하다보면 하나 둘 씩 등장하는 개념이니 천천히 배우면 됩니다.

CTS는 보시면 아시겠지만 언어에 상관 없는, 즉, 닷넷 프레임워크 환경에서 제공되는 데이터 형식, 런타임 구조 등등의 환경이 정의되어 있는 구조입니다. C++로 개발을 한다 하더라도 32비트 운영체제와 64비트 운영체제에 따라 데이터 형식이 달라지는 점이나, 플랫폼에 따라 데이터 형식에 약간의 차이가 발생할 수 있는 점 등등 여러가지 차이점이 있을 수 있습니다. 실행 환경에 대한 고려는 중요한 겁니다. 그런 환경에 대한 정의를 하고 있기 때문에 상당히 중요한 내용을 가지고 있는 것이죠. (프로그래밍을 시작하신 분들이나 일반 응용 프로그램 개발 시에는 데이터 형식에 대해 깊게 따지지 않는 경우가 많아 쉽게 넘어가는 경우가 많습니다. (것보다 따지면서 개발해야 하는 환경이 특수한 환경인데… 할 줄 아는 사람 많은가? ㅡㅅㅡ))

그리고 환경이 언어에 영향을 받지 않아야 하므로 모든 언어에 공통적으로 적용하고 있습니다. 그래서 여러 언어를 지원하면서도 동일한 형식을 이용할 수 있는 것이죠. ㅇㅅㅇ