본문 바로가기
Embedded System/tools

Makefile 자동 생성

by lifeseed 2014. 8. 27.

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

AUTOMAKE_OPTIONS = foreign
SUBDIRS = src

 

2) vim ./helloworld/src/Makefile.am

AM_CFLAGS = --pedantic -Wall -std=c99 -O2
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

#!/bin/sh
# 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/