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