GNUビルドシステム GNUビルドシステム"> GNUビルドシステム">
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

2. GNUビルドシステム

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=autoconf-ja&node=The+GNU+Build+System"
"autoconf-ja/GNUビルドシステム"へのコメント(無し)

Autoconfは重要な問題を解決します -- それはシステム特有の,ビルドと実行 時に見つけた信頼できる情報になります -- しかし,これは移植性のあるソフ トウエアを開発するためのパズルの一つの部品に過ぎません.このために, GNUプロジェクトは,Autoconfが開始した仕事を完了するためのユー ティリティの,統合された組み合わせ(スイート)を開発してきました. GNUビルドシステムの最も重要な構成要素は,Autoconf,Automake, そしてLibtoolです.この章で,我々はこれらのツールを紹介し,より多くの情 報源を提示し,そして,ソフトウェアに対してGNUビルドシステム全 体を便利に使用するように説得してみたいと思います.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

2.1 Automake

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=autoconf-ja&node=Automake"
"autoconf-ja/Automake"へのコメント(無し)

makeの偏在とは,`Makefile'はソフトウェアの自動的なビルド ルールを配布するほとんど唯一の現実的な方法だということを意味しているので すが,すぐにmakeの多くの限界にぶつかります.それには,自動的な 依存性の追跡に対するサポート,サブディレクトリでの再帰的なビルド,(例え ば,ネットワークファイルシステムに対する)信頼できるタイムスタンプなどが 足りないので,開発者はそれぞれのプロジェクトに対し,辛い(そして間違うこ とが多い)車輪の再開発が必要になっています.多くのシステムの makeの癖のために,移植性は些細な問題ではなくなっています.なに よりも,ユーザが期待する多くの標準的なターゲット(make installmake distcleanmake uninstallなど)を手作業で実装する必要 があることがあげられます.もちろん,Autoconfを使用しているので, @CC@@CFLAGS@,そしてconfigureで提供される その他の置換式を認識するように,Makefile.inに対応するコードを挿入 しているでしょう.この乱雑な状況はAutomakeで処理しましょう.

Automakeは,プレーンのMakefileの方法と比較して,非常に簡単でより 強力な構文で,ビルドが必要とするものをMakefile.amファイルで指定す ることを可能とし,Autoconfで使用するための移植性の高いMakefile.in を生成します.例えば,単純な"Hello world"プログラムをビルドしインストー ルするためのMakefile.amは以下のようになります.

 
bin_PROGRAMS = hello
hello_SOURCES = hello.c

結果として得られるMakefile.in(約400行)は,自動的に,すべての標準 的なターゲット,Autoconfが提供する置換式,自動的な依存性追跡, VPATHのビルドなどをサポートします.makehello プログラムをビルドし,make installでそれを`/usr/local/bin' (または`/usr/local'でないときはconfigureで与えたプレフィ クス)にインストールします.

Automakeの利点は,パッケージが大きければ大きい(特にサブディレクトリがあ るもの)ほど有利になりますが,小さなプログラムに対しても重要な利便性と移 植性を追加します.そして,それだけがすべてではありません....



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

2.2 Libtool

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=autoconf-ja&node=Libtool"
"autoconf-ja/Libtool"へのコメント(無し)

他のプログラムでも,これまでの作業の成果から利益を得ることを可能にするた め,プログラムだけでなくライブラリをビルドしたいことも頻繁にあるでしょう. 理想的には,共有(動的にリンクされる)ライブラリを生成したいと考え, それは,複数のプログラムからディスクやメモリに同じものを複製せずに使用す ることが可能で,リンクされているプログラムに依存せずに更新可能だからです. しかし,移植性の高い共有ライブラリは悪夢の元です -- それぞれのシステム は,独自の互換性のないツール,コンパイラフラグ,そして魔法の呪文がありま す.幸いにもGNUは解決方法を提供しています.それは, Libtoolです.

Libtoolは,共有ライブラリのビルドに関するすべての要求を処理し,現時点で は,移植性を扱うための唯一の方法だと思われます.また,以下のよう な頭痛の種も扱います.それは,共有ライブラリの様々な接尾子を扱う Makefileルールの相互作用,以前にスーパーユーザによってインストー ルされた共有ライブラリとの信頼できるリンク,そして,整合性の高いバージョ ン管理システムの提供です(それは,ライブラリの異なるバージョンを,バイナ リ互換性を壊さないようにインストールし更新することを可能にするためのもの です).しかしLibtoolは,Autoconf同様に,単独で使用することは可能ですが, ほとんどは単純にAutomakeと組み合わせて利用されます -- そこで,Libtool は共有ライブラリが必要なときに自動的に使用され,そして使用者はその構文を 知っている必要はありません.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

2.3 参考文献

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=autoconf-ja&node=Pointers"
"autoconf-ja/参考文献"へのコメント(無し)

単一のシステムでの小さなプロジェクトに対して,簡単なmakeを使用 している開発者は,AutomakeとAutoconfを使用するために学習する見通しを立て ると圧倒されるかもしれません.しかし,ソフトウェアはより多くのユーザに配 布されるので,GNUビルドツールが提供するサービスを再発明するた めに多くの努力を費やしていることと,一度犯して解決した過ちを繰り返してい ることがすぐに分かるでしょう.(また,既にAutoconfを学んでいるので, Automakeは朝飯前でしょう.)

GNUビルドツールの詳細な情報を得るために,訪問する場所はたくさ んあります.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]