オープンソースこねこね

Webプログラミングなどについてあれこれ。

AutotoolsとCでHello World

Cなどで書かれたOSSを解析できるようになりたいので、少しづつ勉強中。目標はApacheとかMySQLとかmemcachedとか、そんな普段使っているプロダクトをソースコードレベルで理解できるようにしたいわけです。ただつかうだけじゃなくて。

で手始めにAutotoolsつかってHello World書いてみたよ。忘れないようメモ。

インストール

  # yum install automake
  # yum install libtool

hello.cを作成

#include 
#include 

int main(void)
{
  fprintf(stdout,"hello \n");
  exit(EXIT_SUCCESS);
}

autoscanでconfigure.scanを生成する。

ソースファイルがあるディレクトリをカレントディレクトリにして

# autoscan

configure.scanが生成されるので、リネームする

# mv configure.scan configure.ac

configure.acを編集する

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

AC_PREREQ(2.59)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADER([config.h])

AM_INIT_AUTOMAKE(hello,1.00,hoge@fuga)    (※追加

# Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL   (追加

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h stdio.h])      (※編集
# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.
AC_CONFIG_FILES([Makefile])  (※追加
AC_OUTPUT

aclocalを実行してaclocal.m4を生成する

# aclocal

autoheaderを実行してconfig.h.inを生成する

# autoheader

autoconfを実行してconfigureを生成する

# autoconf

automekaのためにMakefile.amを作成する

# vim Makefile.am
bin_PROGRAMS = hello
hello_SOURCES = hello.c

その他のファイルを作成する(空のファイル)

# touch NEWS README AUTHORS ChangeLog

automakeを実行してMakefile.inを生成する

# automake -a

ビルドする

# ./configure
# make
# make install

以上。

めもめも

configure.acはチェックするファイルの場所や生成するMakefileの場所を指定する。Makefile.amはconfigure.acで指定したMakefile生成先においてそこでビルドに使用するソースなどを記述しておく。configure.acで全体の依存関係とチェック。Makefile.amでビルド作業の実装。 といった感じでしょうか。そんな理解です、今のとこ。aclocalとautoheaderはまだよくわからんす。