우분투에서 서브라임 에디터로 go 개발을 하(려)다보니.
By SeukWon Kang
서브라임 에디터로 go 개발을 하기 위해 필요한 패키지를 찾아보면 바로 보이는 것이
go build 패키지라서 일단 설치는 해두었습니다.
이번 주말에 집에서 오랫 만에 go 코드를 만질 일이 있어서
( 실은 요즘 매일 python 만 하고 있어서 go 도 좀 해두려고.. )
서브라임에서 전에 만들어둔 go 소스를 열고 작업을 시작했습니다.
이왕 하는 김에 제대로 환경을 세팅하려고 프로젝트도 만들고
빌드를 했는데 아무 반응이 없습니다.
물론 터미널을 열고 빌드하면 당연히 잘 되고 ..
에디터 내의 빌드 명령인 <ctrl-b> 로 빌드를 시도하면 아무 반응이 없는 겁니다.
딱히 에러 메시지도 안 나와서 한참을 헤매다가
원래 안되는 건가? 하고 생각도 했습니다만..
에디터 콘솔을 보니 당당하게 에러가 나고 있더군요.
import _ctypes 에서 에러가 발생하고 있었습니다.
뭐지 하고 뒤적뒤적 해보니 ..
당연히 서브라임 에디터는 독자적 python 환경을 가지고 있고
go build package는 그 환경에서 실행되는 것입니다.
문제는
~/.config/sublime-text-2/Packages/Go Build/
에 있는 GoBuild.py 가 문제였고..
이 소스에서 두 개의 라인을 comment out 하고
#import ctypes #MessageBox = ctypes.windll.user32.MessageBoxA
저장하면 드디어 빌드가 됩니다.
그러나 빌드하면 결과물로 exe 가 생성 됩니다. ;;;
그리고 이 파일의 실 내용물은 리눅스용 실행 파일 입니다. ;;;
딱 보니 이 go build 패키지를 만든 인간이
windows에서 개발 하는 인간이며
아무 생각 없이 윈도에서 만 돌게 개발한 듯 합니다.
( 윈도 개발자가 다 그렇지요 뭐.. 윈도 우물 안 개구리들.. )
( 위의 MessageBox 어쩌구도 윈도의 api를 ctype으로 호출하는 코드지요. )
아무튼 상황을 파악했으니
같은 소스에서
“exe” 가 나오는 부분을 찾아서 적절하게 수정해주면 됩니다.
그냥 결과물의 파일 이름에 +‘exe’ 를 하드 코드 하고 있더군요.
이미 수정해서 기억이 안 나지만 아마 output = os.path.join(“bin”, getArch(), project_name + “exe” )
부분 이었던 듯 합니다.
이렇게 수정을 하고 나면 제대로 빌드 해 실행해볼 수 있는 개발 환경 설정이 다 끝납니다.
이 수정 사항을 윈 패키지 개발자에게 patch로 만들어 전달 해야 할지 고민 중 입니다 만
아마 귀찮아서 안 할 듯.합니다 .
게다가 윈 개발자도 한국어를 모를 테니 이 수정 사항이 반영될 가능성은 0 이겠군요. ^^;;
2013-04-27 추가 수정 사항입니다. 위의 수정으로 project 인 경우는 빌드가 잘되나 그냥 파일 하나를 빌드하는 경우는 잘안됩니다.
gobuild.py 파일의 58 번 라인 의 ‘cmf’ : command, 를
‘cmd’: [’ ‘.join(command)],
로 바꿔 주시면 잘됩니다.
원작자가 테스트를 제대로 안했나보군요.
project build 하는 부분과 file 하나인 경우 가 미묘하게 코드가 다릅니다. ;;;