tips:how-to-autotools

文書の過去の版を表示しています。


Autotoolsの使い方

概要

RPPでは、パッケージの作成のために Autotools を使用しています。

Autotools を使用することで、 $ ./configure $ make $ make install とするだけで、ユーザーの環境に合わせてプログラムをコンパイルできます(もちろん設定すればの話ですが・・・)。また、出力されるログを見れば、何が足りないのかを調べることができます。

[http://ja.wikipedia.org/wiki/Autotools Wikipedia の解説]参照。

インストール

# apt-get install automake libtool

使い方概要

元ファイル準備

configure.ac のテンプレート(configure.scan)生成。 $ autoscan

エディタで configure.ac(configure.scan をベースにする)と Makefile.am をがんばって作成。設定項目はそれなりの数ある。

サブディレクトリ間の依存関係は Makefile.am の *_DEPENDENCIES でも解決してくれない様子。トップディレクトリの Makefile.am 内で、 SUBDIRS = include auxlib src … の順番を依存順(先頭から順に make される)にすることで解決。

configure 生成

$ libtoolize -c -f

* –copy(-c)オプション<br>シンボリックリンクを作らず、libtool データディレクトリからファイルをコピーする。

* –force(-f)オプション<br>既存の libtool ファイルを置き換える。デフォルトでは libtoolize は既存のファイルを上書きしない。

$ aclocal

$ autoheader

$ automake -a -c

* –add-missing(-a)オプション<br>パッケージ化に足りないファイルを自動的に生成。

* –copy(-c)オプション<br>–add-missing(-a)オプション時にシンボリックリンクではなくコピーする。

$ autoconf

上記コマンド群で生成されるファイルの流れは下図参照。

autotools.svg.png

修正時

configure.ac などのファイルを修正した場合は、下記コマンドを実行。 $ autoreconf -i -f

* –install(-i)オプション<br>パッケージ化に足りないファイルを自動的に生成。

* –force(-f)オプション<br>既存のファイルを置き換える。デフォルトでは既存のファイルを上書きしない。

パッケージのコンパイル・インストール方法

* 基本(コンパイル・インストール) $ ./configure $ make # make install

* 掃除 $ make clean

* アンインストール # make uninstall

* 配布パッケージ(tarball)作成 $ make dist

* 大掃除 $ make distclean

パッケージ命名規則

[http://archive.linux.or.jp/JF/JFdocs/Software-Release-Practice-HOWTO.html#s2 Linux JF (Japanese FAQ) Project の解説]参照。

プロジェクト名

英大文字やアンダースコア“_”は極力使わない。英小文字+ハイフンを推奨。

バージョン番号

メジャー番号、マイナー番号、マイクロ番号(またはパッチ番号)で管理するのが通例。 major.minor.micro または major.minor.patch

この他にも、日付で管理することもある。

ちなみに、ライブラリバージョンの場合は下記らしい。バージョンの付け方がややこしいので未使用。 current.revision.age

[http://www.bookshelf.jp/texi/libtool/libtool-ja_6.html#SEC35 Libtool 日本語マニュアル]参照。

パッケージ名

プロジェクト名+ハイフン(-)+バージョン数字列+拡張子

パッケージ名の例としては、下記のようになる。 foobar-1.2.3.tar.gz

日付で管理する場合の例は下記。 foobar-080707.tar.gz

  • tips/how-to-autotools.1406023917.txt.gz
  • 最終更新: 2023/03/29 06:15
  • (外部編集)