MS윈도우 XP에서 EmacsW32로 Gtkmm(C++) 프로그래밍...그리고 잡설.....

primewizard의 이미지
2828
points
15
points

제가 좋아하는 데비안 lenny에서 emacs로 Gtkmm 프로그래밍하며 emacs에 서서히 중독되어가다
MS윈도우 XP에서도 emacs를 사용하고 싶어서 MinGW, MSYS, Gtkmm, EmacsW32 등을 설치,테스트 했는데
별 어려움없이 잘 되어서 기념샷 한방!

그리고 필요하신 분들을 위해 절차 남겨둡니다.

1)MinGW 설치
Automated MinGW Installer에서 MinGW-5.1.4.exe 설치
(패키지 선택하는 곳에서 current가 에러나고 안되면 previous로 시도하세요.)

설치중 Choose Components의 콤보박스에서 Full로 설치하였습니다.
MinGW base tools, g++ compiler, MinGW Make 정도만 설치해도 될 것 같았지만 배우는 과정이기 때문에...

C:\_GNU_ 아래에 다른 툴,라이브러리들도 다 집어 넣을려고 설치 폴더를 아래 처럼했습니다.
C:\_GNU_\MinGW

설치완료후 환경변수를 추가해 줍니다.
내 컴퓨터(My Computer) 오른쪽 마우스 클릭 -> 속성(Properties) -> 고급(Advanced)탭 아래 부분 환경변수(Environment Variables) 버튼 클릭후
시스템변수(System Variables)의 Path 앞부분에 C:\MinGW 설치폴더\bin (저 같은 경우 C:\_GNU_\MinGW\bin) 추가해 줍니다.
앞부분에 추가하는 이유는 혹시나 MS윈도우에 같은 명령어가 있을 경우 MinGW의 것이 먼저 사용되도록 하기 위해서 입니다.
(영문 MS윈도우 쓰는 관계로 위 한글 용어가 맞는지는 모르겠습니다. ^^;)

참고:
http://www.mingw.org/wiki/HOWTO_Install_the_MinGW_GCC_Compiler_Suite

2)GDB 설치
GNU Source-Level Debugger에서 gdb-6.8-mingw-3.tar.bz2 다운로드

압축 해제후 MinGW 설치 폴더에 덮어씁니다.
(bin은 bin폴더로 등등 이런식으로...)

3)MSYS 설치
i)MSYS Base System 설치
MSYS Base System에서 밑에 부분에 있는 Current Release: msys-1.0.10 를 클릭하면 나오는
MSYS-1.0.10.exe 설치

설치 위치는 C:\_GNU_ 아래 C:\_GNU_\msys\1.0 에 설치했습니다.

ii)msysDTK 설치
MSYS Supplementary Tools에서 Current Release: msysDTK-1.0.1 클릭후 msysDTK-1.0.1.exe 설치

iii)msysCORE 설치
MSYS Base System에서 msysCORE-1.0.11-20080826.tar.gz 다운로드

압축해제후
MSYS Base System 설치했던 C:\_GNU_\msys\1.0 폴더에 덮어쓰시면 됩니다.
(msysCORE-1.0.11에 기존 설치프로그램으로 설치되는 것 보다 좀 더 최신 프로그램들이 들어있는 것으로 보임)

참고사항으로 c드라이브를 사용하기 위헤 /etc/fstab 에 추가해서 마운트 안해도
$ cd c: or $ cd c/ 로 바로 전환이 됩니다.
($ mount 명령 실행하면 리스트 나옴)
그리고 c:/Documents and Settings/자신의계정/Desktop 을 마운트(?)하고 싶어서
이리저리 테스트 해보던 중 MSYS 홈에 폴더(Desktop)를 만들어 주고
/etc/fstab 에

c:/DOCUME~1/자신의계정/Desktop /home/자신의계정/Desktop

이렇게 하고 재부팅하니 인식이 됩니다.
또한 단독 실행된 MSYS 에서는 한글 입출력이 안되는데 5)번 처럼 emacs 안에서 w32shell을 MSYS로 하니 잘 됩니다.

참고:
http://www.mingw.org/wiki/msys

문자열 복사는 마우스 왼쪽 버튼 드래그, 붙여넣기는 가운데(휠) 버튼

4)gtkmm 설치
http://ftp.gnome.org/pub/GNOME/binaries/win32/gtkmm/에서 원하는 버전 다운로드

저 같은 경우 데비안 lenny를 사용하고 있는데 2.12버전이 저장소에 있어서 그것을 사용하는 관계로
MS윈도우에서도 gtkmm 2.12 버전 설치하기로 결정하고 gtkmm-win32-devel-2.12.7-3.exe 설치

설치중 일관성을 위해 설치 폴더를 C:\_GNU_\gtkmm 로 변경했습니다.

참고:
http://live.gnome.org/gtkmm/MSWindows

5)EmacsW32 설치
http://ourcomments.org/cgi-bin/emacsw32-dl-latest.pl에서 Emacs-23-CvsP080909-EmacsW32-1.58.exe 설치

환경변수에 C:\Program Files\Emacs\emacs\bin 추가
MSYS에서 cedet 패키지 make 할 때 필요

환경변수에 C:\Program Files\Emacs\EmacsW32\gnuwin32\bin 추가 (이것은 꼭! 앞부분에 추가)
Warning (w32shell): When using 'msys' program 'locate' can't be found 방지와 grep-find 문제 해결하기 위해

EmacsClient 바로가기(Shortcut) 속성에서 시작위치(Start in)를 %USERPROFILE% 로 변경하시면
처음 C-x C-f 했을때 C:\Documents and Settings\자신의 계정\ 이 기본값이 됩니다.
(원하시는 값으로 변경하세요.)

저같은 경우 EmacsClient(emacsclientw) 보단
C:\Program Files\Emacs\emacs\bin\runemacs.exe가 더 편해서 바로가기 하나 만들어서
C:\Documents and Settings\All Users\Start Menu\Programs\GNU Emacs 에 추가해서 사용했습니다.
(emacsclient경우 여러번 실행해도 프로세스가 1개이고 runemacs는 실행할때 마다 새로운 프로세스가 생깁니다.)

i)쉘을 MSYS로 변경

M-x customize-group
w32shell

W32shell Msys Bin: 값에 C:/_GNU_/msys/1.0/bin 적어 넣음
state 버튼 누르고 Save for Future Sessions

W32shell Shell: Value Menu 누르고 MSYS로 변경
state 버튼 누르고 Save for Future Sessions

ii)grep-find(find-grep) 문제 해결
M-x grep-find 하면

grep -r <C> -nH -e . --include=
/bin/sh: C: No such file or directory

Grep finished with no matches found at 날짜

또는
find . -type f -exec grep -nH -e  {} NUL ;
find: missing argument to `-exec'

Grep finished with no matches found at 날짜

또는
find . -type f -print0 | xargs -0 -e grep -nH -e
grep: unrecognized option `--color=auto'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

Grep exited abnormally with code 123 at 날짜

이런 식으로 메세지가 나오고 안되었습니다.

그래서 제가 쓴 해결 방법은 위 환경변수 설정에서 꼭 앞부분에 추가하라고 한 것 앞부분에 추가하고

M-x customize-group
grep

Grep Highlight Matches: Value Menu 버튼 누르고 "Not Set"로 변경
state 버튼 누르고 Save for Future Sessions

Grep Find Use Grep R: Toggle 버튼 누르고 "off (nil)"로 변경
state 버튼 누르고 Save for Future Sessions
이렇게 했습니다.

위 설정을 한 후 grep-find를 다시 해보면 리눅스에서 처럼

Run find(like this): find . -type f -print0 | xargs -0 -e grep -nH "검색어"

이렇게 나오고 정상적으로 명령이 수행됩니다.

6).emacs 파일 설정
저같은 경우
~/.emacs 파일에는 되도록 emacs 자체(customize-browse, customize-group 등을 이용해서)에서 설정한 것만 들어가고
~/.emacs.d/_manual-setting_.el 에 매뉴얼 설정을 하여 따로 분리 하였습니다.
궁금하신분은 첨부파일(emacsw32settings.zip) 참고하세요.
(customize-browse에서 제가 못 찾는 것인지... 암튼 안나타나는 것이 있었습니다.
그런 것은 customize-group을 이용하거나 수동설정을 하였습니다.)

그리고 보통 emacs 자체 설정 기능을 한 번 사용하면 .emacs 파일이 자동으로 생성되지만
수동으로 생성하길 원하시는 분은 C:\Documents and Settings\자신의 계정\Application Data 폴더에 생성하시면 됩니다.
MS윈도우 탐색기에서는 .emacs 파일 생성이 안되니 "_emacs" 로 파일명을 만드시거나 MSYS나 emacs 내부에서 생성하세요.
.emacs.d 폴더도 같은 원리입니다.

또한 설정파일 내부에서 ~/ 와 C:\Documents and Settings\자신의 계정\Application Data 는 같은 것입니다.

7)emacs-goodies-el 설치
제가 데비안에서 사용하는 highlight-current-line, shell-command, folding-mode, tabbar-mode, bar-cursor-mode 등등을
일일히 설치하는 것은 너무 귀찮은 일인 것 같아 그냥 데비안 패키지 다운로드해서 해제후 사용하기로 했습니다.

그리고 패키지로 된 것 보다
http://alioth.debian.org/projects/pkg-goodies-el/ 를 참고해서
MSYS 안에서 cvs 명령어로 최신 버전을 직접다운로드 하는 것이 최상의 방법이라 생각되나 테스트이기도 하고 귀찮은 관계로(^^;)
http://packages.debian.org/lenny/emacs-goodies-el에서 emacs-goodies-el_29.3.orig.tar.gz 다운로드

압축해제후
emacs-goodies-el 폴더를 C:\Documents and Settings\자신의 계정\Application Data\.emacs.d\emacs-goodies-el 로 복사

.emacs 설정에서 (highlight-current-line)함수 때문에 문제가 생기기 때문에 (custom-set-variables) 보다 앞 쪽에서

(add-to-list 'load-path "~/.emacs.d/emacs-goodies-el")
(load "emacs-goodies-el")

(custom-set-variables ........

이런 식으로 추가하세요.

8)doxymacs 설치
http://doxymacs.sourceforge.net/
http://sourceforge.net/project/showfiles.php?group_id=23584에서 doxymacs-1.8.0.tar.gz 다운로드

압축해제후
no-autoconf 폴더를 C:\Documents and Settings\자신의 계정\Application Data\.emacs.d\doxymacs 로 복사

.emacs 파일에 아래 추가

(add-to-list 'load-path "~/.emacs.d/doxymacs")
(require 'doxymacs)

9)cedet 설치
http://cedet.sourceforge.net/

1.0pre4 버전에서 C++ namespace를 쓸 경우 자식클래스에서 부모클래스 멤버가 자동완성에 안나타나는 문제가 있고
자동완성도 너무 느려서 cvs 버전을 설치하였습니다.

MSYS에서

cvs -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet login
암호 물어보면 엔터
cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P cedet

탐색기로 C:\Documents and Settings\자신의 계정\Application Data\.emacs.d\cedet-cvs 로 옮기고 MSYS에서 make 실행

주의사항으로 5번에서 환경변수 경로에 C:\Program Files\Emacs\emacs\bin 이 제대로 들어가 있는지 확인하시고
혹시 "you can use touch to update the Makefile time stamp." 메세지가 나오면

$ find . -name Makefile -exec touch {} \;
$ make

해주세요.

만약 그래도 컴파일 단계에서 에러가 나면 아래처럼 해보세요.

$ find . -name Makefile -exec touch {} \;
$ make clean-autoloads
$ make clean
$ make

그리고 cedet 기능을 emacs 시작할 때 불러들여야 하는데
저 같은 경우 "~/.emacs.d/cedet-cvs.el" 파일에 관련 설정을 집어넣고

(load "~/.emacs.d/cedet-cvs") 이런식으로 .emacs 설정파일(_manual-setting_.el)에 포함시켰습니다.

참고사항으로 자동완성 (semantic-ia-complete-symbol-menu) 창이 C-g 로 사라지지 않는데
ESC 나 특이하게 왼쪽 Alt 키를 누르니깐 사라지더군요.

그리고 자동완성이 안되고

semantic-analyze-possible-completions-default:
Cannot find types for `"..."'

이런 에러가 나온다면
.emacs 파일에서 (semantic-add-system-include) 함수로 헤더파일 경로를 잘 설정했는지 확인하고

C-x C-s (save-buffer)
M-x revert-buffer

이렇게 해보세요.

저 같은 경우 아래 사이트를 참고해서
http://www.stokebloke.com/wordpress/2008/04/17/emacs-refresh-f5-key/

위처럼 하는 대신

(defun refresh-file-after-save-buffer ()
  "refresh file after save buffer"
  (interactive)
  (save-buffer)
  (revert-buffer t t t) )

(global-set-key [(control c)(control R)] 'refresh-file-after-save-buffer)

이렇게 .emacs 에 넣고 사용합니다.

10)ecb 설치
http://ecb.sourceforge.net/

저같은 경우 리눅스에서 snapshot 버전을 사용하는 관계로 MS윈도우에서도 Latest CVS-shapshot 버전을 설치했습니다.

~/.emacs.d/ecb-snap/ 에 압축풀어서 복사

~/.emacs.d/ecb-snap/Makefile 파일에서

CEDET=c:/Programme/emacs-21/site-lisp/package-development/cedet
이렇게
CEDET=~/.emacs.d/cedet-cvs

수정후 make 명령 실행(emacs 내부에서... 그렇지 않은 경우 c:\ 포함한 전체 경로를 적어줘야 하지 않을까 생각.....)

그리고 ecb 기능을 emacs 시작할 때 불러들이기 위해
"~/.emacs.d/ecb-snap.el" 파일에 관련 설정을 집어넣고
(load "~/.emacs.d/ecb-snap") 이런식으로 .emacs 설정파일(_manual-setting_.el)에 포함시켰습니다.

11) yasnippet 설치
http://code.google.com/p/yasnippet/

위의 cedet,ecb 처럼 설치

12)javascript-mode, expand-member-functions 설치
http://www.emacswiki.org/cgi-bin/wiki/JavaScriptMode
http://www.brgeight.se/downloads/emacs/javascript.el

http://wiki.kldp.org/wiki.php/EmacsExpandMemberFunctions
http://www.emacswiki.org/cgi-bin/wiki/ExpandMemberFunctions

13) Gtkmm(C++) 예제작성하며 테스트 해보기
탐색기에서 컴파일된 Gtkmm 프로그램 실행시 Console 창 안보이게 하는 방법은
-mwindows 옵션을 주어서 컴파일하시면 됩니다.

주의 사항:
msys에 쓰이는 파일은 LF으로만 끝나도록 하세요.
\, / 사용에 주의하세요.

의문점:
가끔 종료할때 fatal error 라고 뜨던데 MS윈도우를 클린설치 하고 emacs만 딱 설치하고 사용하니
아직까지 아무런 문제가 안생기더군요.
이유를 모르겠습니다. ^^;

첨부 파일파일 크기
emacsw32gtkmm.png46.66 KB
emacsw32settings.zip118.92 KB
semmal의 이미지
2956
points

당신이 바로 챔피언입니다.

2
points

좋은 자료 감사합니다.
------------------------------
How many legs does a dog have?

madman93의 이미지
1798
points

와우

2
points

정말로 수고하셨습니다.

노고에 감사드립니다.

이렇게 해 주시기가 쉽지 않은데 말이죠
저도 바로 스크랩을 해 두어야 겠습니다.

yasnippet를 사용중이신것 같은데
gtkmm관련 snippet이 있으시면 부탁좀 드려도 될까요?

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

primewizard의 이미지
2828
points

특별히 쓰는 것은 없습니다.

2
points

gtkmm도 c++로 만들어져 있기 때문에 yasnippet에 있는 c++-mode용 기능 외에는
특별히 쓰는 것은 없습니다.

참고로 emacs 메뉴에 보시면 YASnippet 메뉴 항목이 있는데
각 모드 별로 키워드가 나와있습니다.
메뉴에서 선택하셔도 되지만 보통은 메뉴 항목 오른쪽 끝에 나와있는
키워드 치고 tab 누르시면 기능이 작동합니다.

좋은 자료 감사합니다.

2
points

인터넷에 나돌던 영문자료로 검색해서 하나하나 설치 했던 것을 저렇게 정리해서 보고 나니 깔끔하네요 :)

감사합니다.

2
points

쭉 따라하다가
9)cedet 설치 부분 make 실행시 에러가 나더군요.
semantic-grammar-wy.el:512:31:Error: End of file during parsing
와 같은 에러 였습니다.

semantic-grammar-wy.el 파일의 줄바꿈 타입을 unix 식으로 바꿔서 저장하고 나니 해결되었습니다.

혹시 저와 같은 문제를 겪는 분이 계실까 해서 글 남겨봅니다.

멋지게

2
points

멋지게 정리하셨네요. 정말 고생하셨습니다.

時日也放聲大哭

lovian의 이미지
1132
points

오오~ emacs 맨땅에

2
points

오오~
emacs 맨땅에 시작하기 암울했었는데.
도전의 벽이 상당히 낮아졌네요~

-----------------
한글을 사랑합니다.

완벽합니다.

2
points

진짜 도움 많이됐습니다.

감사합니다 ~

molla의 이미지
2431
points

wiki쪽에 emacs 자동완성쪽 글을 정리해 주신 분이시군요. :)

1
point

좋은 자료 잘 봤습니다.

그런데, wiki 쪽에 올리신 스크린샷에 보면, toolbar 의 icon이 기본이 아닌것 같던데, 어떻게 바꿀 수 있나요?

그리고 wiki 쪽에는 ECB쪽 설치 설명이 빠진듯 싶네요. 아래에는 ecb를 활용하는 예제는 들어있는데 말이죠.

primewizard의 이미지
2828
points

그건...

1
point

툴바 아이콘은 gnome-icon-theme-gartoon 패키지이고 데비안 저장소에 있습니다.
MS윈도우에서는 글쎄요.
MS윈도우에서 gtk 테마 적용이 가능 할 것도 같은데... 다른 고수님께 패스.....^^;

그리고 주제가 자동완성이여서 ECB는 소개만 했습니다. ^^

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.