プログラム / 2010/01/02 (Sat) / 編集 |
さきほどcmakeの使い方を調べたので今度はautomakeとautoconfの使い方を調べてみた。手順は長いけど自分で用意するのは「ソースコード」「Makefile.am」の二つで、「condigure.in」(autorecnfの時は「condigure.ac」)はテンプレを修正して作成すればおけらしい。
この3つさえ用意すればあとは環境にあわせてライブラリやヘッダファイルの存在などをチェケしつつコンパイルするというなんかカッコいいのが作れる!
cmakeはクロスプラットフォーム向け、autoconfはGNU系列なのでLinux向けってことか?どっちも設定ファイルは実質1つ(Makefile.amは2行だし)なので労力はそんなにかわらないと思われ。個人的にはcmakeの方が好みだな、ドキュメント少ないけど、、、
この3つさえ用意すればあとは環境にあわせてライブラリやヘッダファイルの存在などをチェケしつつコンパイルするというなんかカッコいいのが作れる!
cmakeはクロスプラットフォーム向け、autoconfはGNU系列なのでLinux向けってことか?どっちも設定ファイルは実質1つ(Makefile.amは2行だし)なので労力はそんなにかわらないと思われ。個人的にはcmakeの方が好みだな、ドキュメント少ないけど、、、
事前準備
ソースコード「strchr.c」//config.hが存在するなら読み込む #ifdef HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include <stdio.h> #else int printf (const char *format, ...); #endif #if HAVE_STRING_H # include <string.h> #else # ifndef HAVE_STRRCHR # define strrchr rindex # endif char *strrchr (); #endif int main (int argc, char *argv[]){ char *p, *program_name; p = strrchr (argv[0], '/'); if (p == NULL) program_name = argv[0]; else program_name = p+1; printf ("program_name: %s \n", program_name); return 0; }
configure.inの生成
autoscanコマンドで「configure.scan」を作成autoscan「configure.scan」を修正し、「configure.in」を作成。赤字が修正部分。
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) #初期化 AC_INIT(StrChr, 0.1, yosilove@mail) #automakeの初期化 AM_INIT_AUTOMAKE(strchr, 1.0.0, no-define) AC_CONFIG_SRCDIR([strchr.c]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC AC_PROG_INSTALL # Checks for libraries. # Checks for header files. AC_HEADER_STDC #ヘッダファイルの存在確認 AC_CHECK_HEADERS([stdio.h],[AC_DEFINE(HAVE_STDIO_H)],[AC_MSG_ERROR([Sorry, can't do anything for you])]) AC_CHECK_HEADERS([string.h],[AC_DEFINE(HAVE_STRING_H)],[AC_MSG_ERROR([Sorry, can't do anything for you])]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST # Checks for library functions. AC_CHECK_FUNCS([strrchr]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT
Makefile.amを作成
automakeの設定ファイルである「Makefile.am」を用意#実行ファイル名 bin_PROGRAMS = strchr #ソースコード strchr_SOURCES = strchr.c以下、「1.自分でやるよ」と「2.autoreconfに任せるよ」に分岐
1-1) aclocal
automake用のマクロファイル(.m4)を生成するために「aclocal」コマンドを実行%aclocal「autom4te.cache」と「aclocal.m4」ができる。
1-2) config.h.inの生成
%autoheader「config.h.in」が生成される
1-3) Makefile.inの生成
automakeコマンドに「-a」オプションを付けてMakefile.inの生成%touch NEWS README AUTHORS ChangeLog %automake -a「NEWS」「README」「AUTHORS」「ChangeLog」がないといけないのでtouchコマンドで生成。automakeすると「INSTALL」「COPYING」「depcomp」「missing」「install-sh」と「Makefile.in」が生成される。
1-4) configureの生成
%autoconf「configure」が生成される。
2) autoreconfでconfigureを作る
1)シリーズのコマンドってテンプレだし、いちいち入力するのめんどいよね〜というわけで、普通はまとめて実行出来るように「bootstrap」や「autogen.sh」なスクリプトを書いておくんだけど、、、
それらをまとめてやってくれるコマンド「autoreconf」を使うという方法もある。 ちなみに、「configure.in」でもできたりするが、autoreconfを使うときはファイル名は「configure.ac」の方が正式。
%touch NEWS README AUTHORS ChangeLog %autoreconf -i「bootstrap」や「autogen.sh」と比べるとちょっと劣るらしいけど、大体のプログラムはこれで通るらしい。
Makefileの生成
%./configure「config.status」「config.log」「config.h」「stamp-h1」と「Makefile」ができる。
実行ファイルの生成
%make「strchr.o」と「strchr」ができる、strchrを実行すると
%./strchr program_name: strchr
PR
トラックバック
URL :
コメント