30 October 2010

(Linux) Automake, Autoconf を用いた configure スクリプトの作成

Makefileを自動で作成するためのconfigureスクリプトを、Automke, Autoconfを用いて作る方法のメモ。

■ 用意したソースコードの依存関係

test.c をコンパイルし、libtest.aスタティック・ライブラリをリンクして、実行ファイルtest_execを作ることを想定する

20101030-rawskel.png

1: gcc -c -o libtest.a libtest.c
2: gcc -o test_exec -L. -ltest test.c

test.c

#include <stdio.h>
#include "libtest.h"

int main(void)
{
printf("%s\n", test_lib_func("Hello"));
return(0);
}

libtest.c

#include <stdio.h>

char str_static[128];

char *test_lib_func(char *str)
{
sprintf(str_static, "%s World !", str);
return(str_static);
}

libtest.h

char *test_lib_func(char *str);

■ ここから先のファイル生成依存関係概略

20101030-progskel.png

■ Makefile.am の作成

Makefile.am

noinst_PROGRAMS = test_exec
test_exec_SOURCES = test.c
test_exec_CFLAGS = -v
test_exec_LDADD = libtest.a
test_exec_DEPENDENCIES = libtest.a

lib_LIBRARIES = libtest.a
libtest_a_SOURCES = libtest.c

ここで、”noinst_”としているのは、実行ファイルをbin や sbin などにインストールしないから。 緑色で着色したgccに渡す特別なフラグを定義した場合は、automakeコマンドで次のような警告が出るが、特に問題は起こらない(ように感じる)。


$ automake -a

Makefile.am:2: compiling `test.c' with per-target flags requires `AM_PROG_CC_C_O' in `configure.in'

■ configure の作成の準備

configure.scan の作成


# autoscan

configure.scan を configure.in に改名する。さらに、必要な編集を行う

configure.in

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.65])
AC_INIT(test.c)
AM_INIT_AUTOMAKE(test, 1.0)
AC_CONFIG_SRCDIR([test.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

#AC_CONFIG_FILES([Makefile])
AC_OUTPUT(Makefile)

libtoolがインストールされていない場合は、libtoolパッケージをシステムにインストールする。

■ configure実行に必要なファイルの作成

configure.h.inの作成


# autoheader

■ Makefile.in の作成

欠落している(ドキュメント)ファイルを作成する。(空のファイルを作成する)
libtool(ライブラリ)を使う場合は、libtoolizeも実行して、欠落ファイルへのシンボリックリンクを作成する。


$ touch NEWS README AUTHORS ChangeLog
$ libtoolize

aclocal.m4 の作成


$ aclocal

makefile.in の作成


$ automake -a

■ configure の作成


$ autoconf

■ 参考資料

autoconf / automake を使ってみよう!
Automakeでmakeする
autoconfとautomakeの使い方
automake