Linux에서 Makefile을 자동 생성하는 방법을 정리한다.
기본 생성과정은 다음과 같다.
1. autoscan -> configure.scan 생성
2. configure.scan 의 수정 및 확장자 변경 :: configure.ac
3. aclocal :: configure.ac 로 부터 aclocal.m4 생성 (Macro 정의)
4. autoconf :: configure.ac로 부터 configure 실행 script 파일 생성
5. Makefile.am 작성
6. automake :: Makefile.am 로 부터 Makefile.in 생성
7. ./configure :: Makefile 생성
8. make -f Makefile
2 ~ 6 의 과정을 bootstrap 이라는 실행 script로 생성하여 두면 편리하다.
A. 기본 준비 작업
우선 작업 Directory를 생성한다.
작업 directory 구조는 Project Root Path에 Makefile을 생성하고, Source Code 는 src 라는 Directory에 위치한다.
1) $ mkdir -p ~/work/helloworld/src
2) $ cd ~/work/helloworld
3) $ vim ./src/hello.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
B. Makefile.am 생성
autoscan 시 Makefile.am 이 있으며 AC_CONFIG_FILES 가 자동으로 생성된다.
없을 경우 사용자가 editor를 통하여 추가해 주어야 한다.
1) vim ./helloworld/Makefile.am
SUBDIRS = src
2) vim ./helloworld/src/Makefile.am
AM_LDFLAGS =
bin_PROGRAMS = helloworld
helloworld_SOURCES = hello.c
C. configure.ac 생성
현재 작업 위치는 ~/work/helloworld 이다.
$ autoscan 실행
configure.scan 이 만들어 진다.
editor로 파일을 열어서 수정하자.
cf) 붉은색 글씨가 생성된 파일에서 수정한 Text 이다.
파란색 글씨는 Makefile.am 이 있을 경우 생성되는 Text이며 없을 경우 사용자가 추가하면 된다.
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
#AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_INIT([helloworld], [1.0])
AM_INIT_AUTOMAKE([helloworld], [1.0])
AC_CONFIG_SRCDIR([src/hello.c])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
AC_CHECK_HEADERS([stdlib.h])
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_OUTPUT
configure.scan 을 configure.ac 로 변경하자.
$ mv configure.scan configure.ac
D. aclocal.m4 생성
$ aclocal 실행
aclocal.m4 파일이 생성된다.
E. configure 파일 생성
$ autoconf 실행
실행가능한 configure 파일이 생성된다.
F. config.h.in 파일 생성
$ autoheader 실행
configure.ac 의 AC_CONFIG_HEADERS([config.h]) 구문이 있을 경우 반드시 수행하여 config.h.in 파일을 생성해야 한다.
G. Makefile.in 생성
$ automake --add-missing --copy 실행
이제 ./configure 를 실행하면 Makefile이 생성되고 make 명령을 이용하여 build 를 하면 된다.
D~G 과정을 bootstrap 라는 실행 scrapt로 만들자.
$ vim bootstrap
# Run the autotools bootstrap sequence to create the configure script
# Abort execution on error
# bootstrap the autotools
(
aclocal
autoconf
autoheader
automake --add-missing --copy
)
echo "Bootstrap complete. Quick build instructions:"
echo "./configure ...."
$ chmod +x ./bootstrap
즉 C까지 실행후
$ ./bootstrap
$ ./configure
$ make
를 순서대로 수행하면 src directory에
helloworld 라는 실행파일이 생성된다.
이 후엔 configure.ac / Makefile.am 를 작성하는 법을 알아볼 예정이다.
CF) automake reference :: http://korea.gnu.org/manual/release/automake/