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はまだよくわからんす。