今度はautomakeとautoconfの使い方を調べてみた。手順は長いけど自分で用意するのは「ソースコード」「Makefile.am」の二つで、
이번에는 automake와 autoconf의 사용법을 조사해 봤다. 순서는 길지만, 준비할 것은 "소스코드", Makefile.am" 으로, "configure.in"
「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」#ifdef HAVE_CONFIG_H # include "config.h" #endif #if HAVE_STDIO_H # include#else int printf (const char *format, ...); #endif #if HAVE_STRING_H # include #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
댓글 없음:
댓글 쓰기