Makefileを自動で作成するためのconfigureスクリプトを、Automke, Autoconfを用いて作る方法のメモ。
■ 用意したソースコードの依存関係
test.c をコンパイルし、libtest.aスタティック・ライブラリをリンクして、実行ファイルtest_execを作ることを想定する
1: gcc -c -o libtest.a libtest.c
2: gcc -o test_exec -L. -ltest test.c
#include <stdio.h>
#include "libtest.h"
int main(void)
{
printf("%s\n", test_lib_func("Hello"));
return(0);
}
#include <stdio.h>
char str_static[128];
char *test_lib_func(char *str)
{
sprintf(str_static, "%s World !", str);
return(str_static);
}
char *test_lib_func(char *str);
■ ここから先のファイル生成依存関係概略
■ 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 に改名する。さらに、必要な編集を行う
# -*- 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