컴파일 자동화 시스템 만들기 – autotools (automake, autoconf, aclocal, autoheader, configure)


개발된 C/C++ 소스를 어느 환경에서 컴파일할 수 있는 컴파일을 시스템에 맞도록 적절하게 컴파일할 수 있도록 하는 configure 파일을  만드는 방법을 정리

1. 일반적인 개발

보통 C/C++ 소스를 만들어 컴파일 하는 방법은 이미 만들어진 “Makefile”을 통해서 하는 방법이나 컴파일 명령어를 command를 사용해서 직접한다.

 

이럴 경우 개발한 시스템에서는 잘될 수 있으나, 다른 시스템이나 OS가 다른 이 기종간에 시스템에서 개발된 소스를 컴파일하려면 무척 어려움을 존재한다. 이 기종 시스템에서 쉽게 소스를 컴파일을 할 수 있도록 개발된 도구가 “automake” “autoconf” 등등의 툴이 개발되었다. 또한 이러한 시스템에서는 “configure” 파일을 통해서 컴파일을 자동화가 가능하게 구성할 수 있다.

 

 

2. Autotools 소개

Autotools는 autoconf, automake, libtool로 구성된 자동화 컴파일을 구성할 수 있도록 만들어주는 도구입니다.

일반적인 GNU/GPL 소스프로그램들은 Autotools를 통해서 build 환경을 제공합니다.

사용자 입장에서는 아래와 같은 간단한 명령어를 통해서 컴파일이 가능합니다.

./configure

  • 시스템에 설치된 프로그램과 라이브러리를 분석해서 Makefile을 생성합니다.
    라이브러리가 없다면 이를 사용자에게 알려주거나, 경우에 따라서는 우회할 수 있는 방법이 설정되어 있습니다.

make

  • Makefile을 기반으로 컴파일을 진행합니다.
    마지막에 실행하는 “make install”은 Makefile에 “install”이라고 설정된 루틴을 실행하는 것입니다.

 

Autotools를 통해서 “configure” 파일을 생성하려면 아래 2가지 파일을 작성해야합니다.

‘Makefile.am’     An input to automake
‘configure.ac’     An input to autoconf

Makefile.am은 automake를 실행할 때 사용하는데, 결과물인 “Makefile.in” 파일을 생성합니다.

Makefile.in은 Makefile을 생성하기 위한 템플릿입니다.

configure.ac는 autoconf 명령어를 실행하는데 필요한 파일입니다.

configure.ac는 기반파일이라서 작성이 어려울 수 있습니다. 이를 돕기 위해서 autoscan 명령어가 존재합니다. 참고로 autoscan 명령어를 실행하면, configure.scan 파일이 생성되고 이를 적절하게 수정해서 configure.ac 파일로 만들면 됩니다.

 

 

3. hello.c 파일을 통한 자동화 컴파일 시스템 구성

아래 예제는 “Learning the GNU developement tools”에 있는 예제를 통해서 작성해봅니다.

http://autotoolset.sourceforge.net/tutorial.html

3.1 hello.c 작성

아래와 같이 간단한 hello.c 파일을 작성해서 컴파일이 되는지 확인해본다.

 

3.2 Makefile.am 작성

bin_PROGRAMS – 생성되는 실행파일 이름

hello_SOURCES – 실행 파일을 컴파일하기 위한 소스
설정된 프로그램명 + “_” + SOURCES와 같은 형식으로 구성됩니다.
만약 bin_PROGRAMS가 test라면 “test_SOURCES”라는 이름이 됩니다.

3.3 configure.ac 만들기

위와 같이 파일이 존재할 때, autoscan 명령어를 실행해줍니다.

configure.scan 파일이 생성됩니다.

이제 해당 파일을 열어서 아래와 같이 수정하고 configure.ac로 파일명으로 수정합니다.

AC_INIT, AM_INIT_AUTOMAKE를 필히 존재해야합니다.

작업 결과물은 아래와 같습니다.

aclocal, autoheader, autoconf를 실행해서 “configure” 파일을 생성합니다.

결과물은 아래와 같습니다.

이제 “configure” 파일이 생성되었습니다.

이제 “Makefile” 파일을 생성할 수 있도록 “Makefile.in” 파일을 생성해줄 차례입니다.

automake 명령어를 통해서 “Makefile.in” 파일을 생성합니다.

 

이제 “configure” 파일을 통해서 “Makefile”을 생성할 수 있습니다. 그리고 “Makefile” 파일이 생성되었다면 “make” 명령어를 통해서 소스를 컴파일 및 설치가 가능해집니다.

 

위 예제를 통해서 적절하게 수정하면 자신에 맞는 자동 빌드 스크립트를 생성하실 수 있습니다.