CPK 1.4 emacs 활용 연습

gurugio의 이미지

1.4 emacs 활용 연습
소스 등록, 소스 작성, 빌드, 빌드에러확인, gdb실행, 프로그램실행,소스 커밋

emacs를 가지고 간단한 소스를 작성해서 subversion에 등록하고, 소스 작성, 컴파일, 컴파일 에러 수정, gdb 디버깅, 프로그램 실행, 소스 커밋을 하는 연습을 해보겠습니다.

먼저 subversion 계정을 만드시기 바랍니다. 개인 머신에 서버를 만드시거나, 구글 코드 등의 서비스 사이트에 가입하시는 것도 좋습니다. 구글 코드가 초기에는 매우 느리고 불편했는데 최근에는 속도도 빠르고 안정적이어서 즐겨 사용하고 있습니다.

일단 subversion 계정이 있다는 가정에서 시작하겠습니다. 미리 subversion에 커밋된 study라는 디렉토리를 가지고 있다고 가정하겠습니다. 최초로 디렉토리를 등록하는 방법은 사용하시는 subversion 서비스에 따라 다르므로 해당 사이트에 문의를 하시기 바랍니다.

소스를 만들기 위해 ~/study/emacs_pratice라는 디렉토리를 만들겠습니다. M-x svn-status를 실행해서 study를 열어보면 ? ? emacs_practice 라고 출력된 것이 보입니다. 아직 등록되지 않은 디렉토리이기 때문에 ?로 표시됩니다. 커서를 가져가서 A를 입력합니다. 그러면 ?표시가 A로 바뀝니다. svn add가 실행되었고 subversion에 추가될 파일이라는 의미입니다. 이제 커밋을 위해 c를 입력합니다. 로그 입력 버퍼가 나타날 것입니다. 원하시는 메시지를 쓰시고 C-c C-c를 입력하시면 커밋이 실행됩니다. add나 commit 절차를 자동으로 실행해주는 것이 psvn라이브러리입니다.

잠시 기다리면 커밋이 완료되면서 ?표시가 사라지고 디렉토리 이름 옆에 표시가 나타납니다. 이제 C-x C-f를 눌르고 emacs_practice 디렉토리안에 main.c 파일을 만듭니다. 다음 소스를 입력합니다.

#include
int main(void)
{
printf("hello, world");
return 0;
}

소스를 빌드하는 방법은 M-x compile입니다. 단축키를 F9키로 지정하셨다면 F9키를 입력하셔도 됩니다. 컴파일 명령을 입력하게됩니다. Makefile을 만들지 않았으므로, make -k 명령은 지우고 gcc -g main.c 를 입력하겠습니다. *compilation*이라는 버퍼가 나타나면서 컴파일 에러 메시지가 출력될 것입니다. printf 라인에 세미콜론을 붙이지 않았으므로 당연히 컴파일 에러가 발생할 것입니다.

아직 커서가 소스 버퍼에 있을 것입니다. 이때 M-x next-error (단축키 F8)을 입력하면 에러가 발생한 라인으로 커서가 이동할 것입니다. 여러개의 파일을 컴파일 할 때에도 자동으로 에러가 발생한 파일을 열어주므로 에러가 발생한 곳을 바로 수정할 수 있게 됩니다.

printf에 세미콜론을 추가하고 다시 컴파일해보겠습니다. 아무 에러 메시지가 출력되지 않으면 컴파일이 완료된 것입니다. 이제 1차로 소스를 업로드하겠습니다. 다시한번 M-x svn-status를 실행하거나 *svn-status* 버퍼로 이동합니다. *svn-status*버퍼로 이동했을 경우에는 g키를 눌러서 상태를 갱신합니다. a.out와 main.c 파일이 새롭게 나타날 것입니다. 둘 다 아직 subversion에 등록되지 않았으므로 ?가 붙어있을 것입니다. a.out은 등록할 필요가 없으므로 main.c 파일에 커서를 옮기고 a키를 누릅니다. 만약 a.out도 등록하고 싶다면 m키를 눌러서 a.out도 같이 선택되도록 합니다. a키를 누르면 선택된 모든 파일을 A로 표시할 것입니다. 그리고 c를 입력합니다. *svn-log-edit* 버퍼가 나타나면 로그 메시지를 입력합니다. C-c C-c를 입력하면 소스가 등록됩니다.

이제 gdb를 실행해보겠습니다. M-x gdb를 실행하면 gdb --annotate=3 a.out 명령이 쓰여있습니다. 그대로 엔터키를 입력하겠습니다. 커서가 *gud-a.out*버퍼에 있을 것입니다. 그대로 run 명령을 입력하겠습니다. hello, world 메시지가 출력되고 프로그램이 종료될 것입니다.

이번에는 eshell에서 a.out을 실행해보겠습니다. quit 명령을 입력해서 gdb를 종료하고 M-x eshell (단축키 F10)을 입력합니다. *eshell*버퍼에 일반 터미널과 똑같은 모양의 쉘이 나타날 것입니다. emacs_practice 디렉토리로 이동한 다음 ./a.out 명령을 입력해서 빌드한 프로그램을 실행합니다. hello, world 메시지가 출력될 것입니다.

이로서 각 라이브러리를 최소한으로나마 사용해보았습니다. 실제로 개발하면서 emacs의 사용뿐 아니라 이런 라이브러리를 최대한으로 활용하는 것이 개발 효율을 높일 수 있을 것입니다. 자신이 활용하는 도구에 따라 뇌가 변한다고 합니다. 언어나 도구가 생각을 표현하는 수단이 되기 때문에 생각까지도 도구에 맞게 변할 수 있다는 의미인것 같습니다. emacs는 오랜시간 개발 현장의 필요성에 대응하면서 현장에서 성장해온 도구입니다. 현존하는 개발툴 중에서 가장 개발에 힘을 더해주는 도구중 하나일 것입니다. 기능을 찾아서 활용하면서 직접 .emacs 파일에 기능을 추가하면서 사용하면 개발 효율을 더욱 끌어올릴 수 있을 것입니다.

댓글

oppor의 이미지

잠시 기다리면 커밋이 완료되면서 ?표시가 사라지고 디렉토리 이름 옆에 표시가 나타납니다. 이제 M-x M-f를 눌르고 emacs_practice 디렉토리안에 main.c 파일을 만듭니다. 다음 소스를 입력합니다.

이부분에 M-x M-f 가 잘못된것 같네요.
C-x C-f 로^^

그리고 전체 개발 과정을 emacs로 하는것을 목표로 하신다면 hello world 예제는 너무 단순한게 아닌가 싶네요.

이 예제 말고도 리눅스 커널 같은 큰 소스를 분석해본다던지 하는건 어떨까요?

책으로 낸다면 사람들이 책을 읽으면서 같은 커널 버전을 이용해서 실습해볼수도 있을꺼구요.
커널은 너무 큰것 같기도 하네요.^^;;

gurugio의 이미지

이제 2장부터 예제를 만들어가야지요.
앞으로는 emacs에 관한 내용은 안쓰려고 합니다.
코딩관련된 내용만 쓰려구요.

gurugio의 이미지

오류도 수정했습니다.
감사합니다!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.