忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2017/03/24 (Fri) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2010/01/02 (Sat) / 編集
さきほどcmakeの使い方を調べたので今度はautomakeとautoconfの使い方を調べてみた。手順は長いけど自分で用意するのは「ソースコード」「Makefile.am」の二つで、「condigure.in」(autorecnfの時は「condigure.ac」)はテンプレを修正して作成すればおけらしい。
この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 


拍手[2回]

PR
忍者ブログ [PR]