差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン | |||
tips:how-to-autotools [2014/10/30 22:08] – [configure 生成] rpp | tips:how-to-autotools [2023/03/29 06:16] (現在) – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Autotools の使い方 ====== | ||
+ | |||
+ | ===== 概要 ===== | ||
+ | |||
+ | RPPでは、パッケージの作成のために Autotools を使用しています。 | ||
+ | |||
+ | Autotools を使用することで、 | ||
+ | $ ./configure | ||
+ | $ make | ||
+ | $ make install | ||
+ | とするだけで、ユーザーの環境に合わせてプログラムをコンパイルできます(もちろん設定すればの話ですが・・・)。また、出力されるログを見れば、何が足りないのかを調べることができます。 | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | ===== インストール ===== | ||
+ | |||
+ | # 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)%%** | ||
+ | |||
+ | シンボリックリンクを作らず、libtool データディレクトリからファイルをコピーする。 | ||
+ | |||
+ | **%%--force(-f)%%**\\ | ||
+ | 既存の libtool ファイルを置き換える。デフォルトでは libtoolize は既存のファイルを上書きしない。 | ||
+ | |||
+ | $ aclocal | ||
+ | $ autoheader | ||
+ | $ automake -a -c | ||
+ | |||
+ | **%%--add-missing(-a)%%** | ||
+ | |||
+ | パッケージ化に足りないファイルを自動的に生成。 | ||
+ | |||
+ | **%%--copy(-c)%%** | ||
+ | |||
+ | オプション時にシンボリックリンクではなくコピーする。 | ||
+ | |||
+ | $ autoconf | ||
+ | |||
+ | 上記コマンド群で生成されるファイルの流れは下図参照。 | ||
+ | |||
+ | {{autotools.svg.png|}} | ||
+ | |||
+ | |||
+ | ==== 修正時 ==== | ||
+ | |||
+ | configure.ac などのファイルを修正した場合は、下記コマンドを実行。 | ||
+ | $ autoreconf -i -f | ||
+ | |||
+ | **%%--install(-i)%%** | ||
+ | |||
+ | パッケージ化に足りないファイルを自動的に生成。 | ||
+ | |||
+ | **%%--force(-f)%%** | ||
+ | |||
+ | 既存のファイルを置き換える。デフォルトでは既存のファイルを上書きしない。 | ||
+ | |||
+ | |||
+ | ==== パッケージのコンパイル、インストール方法 ==== | ||
+ | |||
+ | === 基本(コンパイル、インストール) === | ||
+ | |||
+ | $ ./configure | ||
+ | $ make | ||
+ | # make install | ||
+ | |||
+ | |||
+ | === 掃除 === | ||
+ | |||
+ | $ make clean | ||
+ | |||
+ | |||
+ | === アンインストール === | ||
+ | |||
+ | # make uninstall | ||
+ | |||
+ | |||
+ | === 配布パッケージ(tarball)作成 === | ||
+ | |||
+ | $ make dist | ||
+ | |||
+ | |||
+ | === 大掃除 === | ||
+ | |||
+ | $ make distclean | ||
+ | |||
+ | |||
+ | ===== パッケージ命名規則 ===== | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | ==== プロジェクト名 ==== | ||
+ | |||
+ | 英大文字やアンダースコア" | ||
+ | |||
+ | |||
+ | ==== バージョン番号 ==== | ||
+ | |||
+ | メジャー番号、マイナー番号、マイクロ番号(またはパッチ番号)で管理するのが通例。 | ||
+ | major.minor.micro | ||
+ | または | ||
+ | major.minor.patch | ||
+ | |||
+ | この他にも、日付で管理することもある。 | ||
+ | |||
+ | ちなみに、ライブラリバージョンの場合は下記らしい。バージョンの付け方がややこしいので未使用。 | ||
+ | current.revision.age | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | |||
+ | ==== パッケージ名 ==== | ||
+ | |||
+ | プロジェクト名+ハイフン(-)+バージョン数字列+拡張子 | ||
+ | |||
+ | パッケージ名の例としては、下記のようになる。 | ||
+ | foobar-1.2.3.tar.gz | ||
+ | |||
+ | 日付で管理する場合の例は下記。 | ||
+ | foobar-080707.tar.gz | ||
+ | |||