이전에 Eclipse CDT를 사용하여 개발했던 Project에 Autotools를 적용하기 위한 방법을 찾다가 Eclipse Plugin을 살펴보니 Incubation 중에 Autotools Support for CDT를 찾을 수 있었습니다.

그것을 사용해서 기존의 Project를 Autotools Project로 만들어 보니, 기존에 Autotools를 조금 사용할 줄 알면 편리하게 개발할 수 있다는 생각이 들더군요.

그래서 이번 Post에서는 Project를 만들면서 경험했던 삽질들을 정리할 겸해서, Ubuntu에서 Eclipse CDT를 사용하여 Autotools Project를 생성하여 개발하고 Debugging하는 방법을 적어보도록 하겠습니다.

1. Autotools?

먼저 Autotools가 무엇인지 모르는 분들을 위하여 간단하게 설명해 보겠습니다. Linux에서 Apache나 PHP와 같은 Open-source Project를 Compile 해 본 경험이 있다면 대부분 다음과 같은 과정을 거쳤을 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... yes
(blah blah....)

# make
make  all-recursive
make[1]: Entering directory `/home/ioriy2k/workspace/test'
Making all in src
make[2]: Entering directory `/home/ioriy2k/workspace/test/src'

gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT test.o -MD -MP -MF .deps/test.Tpo -c -o test.o test.c
mv -f .deps/test.Tpo .deps/test.Po
gcc  -g -O2   -o test test.o  
(blah blah...)

# sudo make install
Making install in src
make[1]: Entering directory `/home/ioriy2k/workspace/test/src'
make[2]: Entering directory `/home/ioriy2k/workspace/test/src'

test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
  /usr/bin/install -c test '/usr/local/bin'
(blah blah...)

물론 Project Source에 따라 약간씩 차이가 있겠지만 위와 유사한 방법으로 Compile하여 설치하는 것이 보통일 것입니다. Autotools는 위와 같은 Build System을 Source Code에 만들어 주는 Tool입니다.

그러면 Autotools로 위와 같은 Build System을 만드는 이유는 무엇일까요? 이 Build System을 사용하게 되면 여러 Unix 계열 OS에 Porting 할 수 있도록 편의를 제공합니다.

그리고 Source Package를 Build할 System이 Build에 필요한 Library나 Tool을 가지고 있는 지를 Check하여 없을 경우에는 미리 경고를 표시할 수 있습니다. 또는 Source Code와 연계하여서 OS에 따라 제공하지 않는 Method를 따로 구현해서 제공할 수도 있습니다.

이 외에도 Autotools를 사용하면 여러가지 이득을 볼 수 있습니다. 물론 Autotools를 사용하여 Source Package에 Build System을 구축해 놓으면 다른 사람들에게 전문적인 Project인 것처럼 보이게 하는 효과도 있습니다. :)

Autotools는 Automake, Autoconf, Libtool 등의 Package로 구성되어 있으며 각 Package는 다음과 같은 기능을 합니다.

  • Automake : Source Code를 Build하기 위해 사용되는 make를 위해서 여러 OS에 Porting할 수 있는 Makefile을 자동으로 생성합니다. 생성을 위해서는 Makefile.am을 작성해야 합니다.
  • Autoconf : 각 OS의 환경을 Check하고 Build에 필요한 환경 File을 생성해 주는 configure Script를 자동으로 생성합니다. 생성을 위해서는 configure.ac를 작성해야 합니다.
  • Libtool : Source Code의 최종 결과물이 실행 File이 아닌 Shared Library나 Static Library를 만드는데 사용하는 Tool입니다. Automake와 Autoconf와 같이 사용될 경우, configure.ac와 Makefile.am을 통해서 간접적으로 사용됩니다.

Autoconf - Automake Process (from Wikipedia)

Source Code에 Autotools로 Build System을 구축하는 방법은 위의 그림과 같은 순서로 이루어 집니다. 약간 복잡해 보이지만 다음과 같이 설명할 수 있습니다.

  1. Makefile.am : automake를 실행하기 위해서 Makefile.am을 만듭니다.
  2. autoscan : Source code가 있는 Directory에서 autoscan을 실행하여 configure.ac를 자동으로 생성합니다.
  3. aclocal : configure.ac에 지정한 Macro에 대한 정보를 가지고 m4 macro를 생성합니다.
  4. autoheader : configure.ac에 지정한 정보를 가지고 config.h.in을 생성합니다. 이것은 나중에 config.h를 만드는 기초자료로 사용되며, Source code에서 config.h를 include하여 해당 Symbol의 상태를 이용하여 System dependent한 구현들을 상황에 맞게 처리할 수 있게 됩니다.
  5. automake : Makefile.am과 configure.ac의 정보를 가지고 Makefile.in을 생성합니다.
  6. autoconf : aclocal.m4와 configure.ac를 가지고 configure Script를 자동으로 생성합니다.
  7. configure : System을 Check하고 Build를 하기 위한 정보를 수집하여 저장하고 make를 위한 Makefile을 생성합니다.
  8. make : configure를 통해 생성된 Makefile을 가지고 Buld를 수행합니다.

어느 정도 감이 오신 분도 있을 것이고, 아닌 분도 있을 것이라고 생각이 됩니다. (Unix-like System에서 개발해 본 경험이 없는 분들은 좀 어려울 지도..) 저의 부족한 설명보다 더 자세하고 쉽게 설명한 아래의 문서들을 보시면 좀 더 쉽게 이해할 수 있을 겁니다.

2. 설치

Autotools가 무엇인지 알게 되었다면 이제 개발에 필요한 Eclipse와 Autotools를 설치해 봅시다.

Autotools의 전부를 이해하지 못한다 해도 이 Post에 순서도 차근차근 따라하다 보면 쉽게 Project를 만들 수 있으니 걱정하지 않아도 됩니다. :)

2.1. Eclipse 설치

Autotools Project를 만들기 위해서 Eclipse를 설치합니다. 설치 방법은 2가지가 있는데 개인의 취향에 따라 아래의 2가지 방법 중 하나를 선택하면 됩니다.

Method 1: Eclipse IDE for C/C++ Linux Developers 설치

첫 번째 방법은 C/C++ 개발을 Eclipse 상에서 수행하기 위해 필요한 Plugin을 미리 설치해 놓은 Package를 Download해서 사용하는 것입니다. 굳이 Plugin Download에 시간을 들일 필요가 없이 한방에 설치할 수 있습니다.

먼저 Eclipse의 Download Page에 Web Browser로 접속합니다.

Eclipse Downloads

Eclipse Downloads

Eclipse IDE for C/C++ Linux Developer의 오른쪽에 Linux 32bit, Linux 64bit 중에서 설치된 OS의 Architecture에 맞는 것을 Click합니다.

Eclipse Downloads - Mirror Selection

Eclipse Downloads - Mirror Selection

그 다음, Download를 위한 Mirror가 Page 상단에 위의 그림과 같이 표시되는데 그 Link를 Click하면 Download가 시작됩니다.

Download한 Eclipse Package는 Terminal에서 다음과 같이 입력하여 압축을 해제합니다.

1
# tar xvzf eclipse*.tar.gz -C ~

위의 명령을 사용하면 ~/Eclipse Directory에 설치됩니다. Directory를 변경하고 싶다면 -C Option 뒤에 설치할 Directory를 입력하면 됩니다.

이제 설치는 모두 완료되었습니다. 그러나 Eclipse를 실행하기 위해서는 JRE 또는 JDK가 필요합니다. Ubuntu Natty Narwhal 11.04의 경우는 다음 Post를, Ubuntu Oneiric Ocelot 11.10의 경우는 다음 Post를 참고하여 설치하면 됩니다.

Method 2: Eclipse CDT Plugin 설치

두번째 방법은 기존에 사용하던 Eclipse에 Plugin 형태로 설치하여 사용하는 방법입니다. Eclipse의 최신 Version인 Eclipse Classic 3.7.1 Indigo를 예로 들어 설명하겠습니다.

Eclipse - Install New Software

Eclipse - Install New Software

Eclipse를 실행한 후, Help -> Install New Software를 Click합니다.

Available Software

Available Software

Available Software Dialog에서 Work With Combobox의 Indigo를 선택합니다. 잠시 기다리면 아래에 설치 가능한 Plugin List가 표시되는데, 여기서 위의 그림과 같이 Programming Langauages의 다음 항목을 Check한 다음 Next를 누릅니다.

  • Autotools support for CDT (Incubation)
  • C/C++ Development Tools
  • C/C++ Library API Documentation Hover Help (Incubation)
Install Details

Install Details

설치될 Plugin의 구체적인 목록이 표시됩니다. Next를 누릅니다.

Review Licenses

Review Licenses

설치될 Plugin의 License가 표시됩니다. 오른쪽 아래의 I accept the terms of the license agreement를 Check하고 Finish를 누릅니다.

Installing Software

Installing Software

Plugin Site에서 설치할 Plugin을 자동으로 Download한 후 설치됩니다.

Restart

Restart

설치가 완료되면 Eclipse를 다시 시작하겠는지 물어보는 Dialog가 표시되는데 Restart Now를 Click하여 재시작하면 Plugin 설치가 모두 완료됩니다.

2.2. Autotools 설치

개발을 위한 IDE인 Eclipse를 설치했다면 이제 Autotools를 System에 설치해 봅시다. Ubuntu의 Repository에 Package가 등록되어 있으므로 Terminal에서 아래와 같이 입력하면 Autotools가 System에 설치됩니다.

1
# sudo apt-get install build-essential autoconf automake libtool

3. Eclipse 설정

설치가 완료되었으니 Eclipse로 Project를 만들기 이전에 개발에 편리한 Setting으로 설정해 봅시다. 먼저, 내용을 설명하기 이전에 Test 환경에 대한 정보를 적어보면 다음과 같습니다.

  • Ubuntu Natty Narwhal 11.04 64bit
  • Eclipse 3.7.1 Indigo
  • Eclipse IDE for C/C++ Linux Devlopers 1.4.1 (C/C++ Development Tools 8.0)
  • Autotools support for CDT (Incubation) 3.0.1
  • autoconf 2.67, automake 1.11.1 and libtool 2.2.6b

위에서 Home Directory의 eclipse Directory에 Eclipse의 압축을 해제했다면 다음과 같이 입력하여 Eclipse를 실행합니다.

1
2
$ cd ~/eclipse
eclipse$ ./eclipse
Workspace Launcher

Workspace Launcher

처음 실행한 경우 위의 그림과 같이 Workspace를 설정하는 Dialog가 표시됩니다. Workspace는 Project를 개발하기 위한 작업공간(Directory)을 나타냅니다. 원하는 Directory를 선택한 다음 OK를 누릅니다.
(실행할 때마다 묻는 것이 귀찮다면 use this as the default and do not ask again을 Check하면 됩니다.)

Eclipse - Open Perspective

Eclipse - Open Perspective

먼저 C/C++ Project를 개발할 환경으로 설정해야 합니다. (Plugin으로 설치한 경우에만 필요) Window -> Open Perspective -> Other를 Click합니다.

Open Perspective

Open Perspective

Open Perspective Dialog에서 C/C++을 선택하고 OK를 누릅니다.

Eclipse - Preferences

Eclipse - Preferences

C/C++을 개발할 환경이 표시되면 이제 개발에 편리한 설정을 해 봅시다. Window -> Perferences를 Click합니다.

Preferences - Key Scheme

Preferences - Key Scheme

CDT가 Eclipse에 설치되면 Key Scheme으로 Visual Studio 항목이 생기게 됩니다. Visual Studio의 단축키에 익숙하다면 General -> Keys -> Scheme -> Microsoft Visual Studio를 선택하면 편리하게 Eclipse를 사용할 수 있습니다.

Visual Studio Key Scheme을 설정하게 되면 Debugging 시에 F10 Key(Step Over)가 Unity의 단축키와 맞물려서 제대로 동작하지 않을 것입니다. F10 Key를 제대로 사용하려면 아래와 같이 Terminal에서 입력하면 됩니다.

1
$ gconftool-2 --type string --set /apps/compiz-1/plugins/unityshell/screen0/options/panel_first_menu ""
Preferences - Documentation Tool

Preferences - Documentation Tool

그리고 C/C++ -> Editor의 Option 중에 Documentation tool comments라는 Section이 있습니다. C/C++ Project를 개발할 경우, Project의 문서화를 위해서 문서화 도구에서 지정한 주석을 사용하게 되는데 여기서 문서화 도구의 종류를 설정하면 주석 입력시 자동으로 해당하는 문서화 도구에 맞는 주석양식이 자동으로 입력됩니다.

또한 그 주석의 내용을 가지고 주석이 해당하는 Class나 Method에 Mouse Cursor가 위치했을 때 주석을 내용을 Tooltip으로 자동으로 표시합니다.

C/C++ 개발시 문서화 도구로 Doxygen을 주로 사용하기 때문에 위의 그림과 같이 Workspace default에 Doxygen을 선택하면 됩니다. Doxygen의 주석 양식과 사용방법이 궁금하다면 Borland C++ Builder 6: Doxygen으로 Source Code 문서화하기 (Part 1)을 참고하기 바랍니다.

이 외의 Preferences 설정은 자신에 맞게 설정해 주면 됩니다. 잘 모르겠다면 나머지는 변경하지 말고 위에 언급한 설정만 적용해도 충분합니다.

4. 마치면서…

이제 Eclipse를 사용해서 Autotools Project를 생성하기 위한 모든 준비가 끝났습니다. 다음 Post에서는 직접 C/C++ Project를 생성해 보고, 새로운 Source를 추가하는 방법과 Debugging을 하는 방법 등을 알아보도록 하겠습니다.