「Configure」の意味や使い方 わかりやすく解説 Weblio辞書 (original) (raw)

GNU Autotools

作者 コミュニティ
開発元 フリーソフトウェア財団
最新版 複数
プログラミング言語 m4, C
対応OS クロスプラットフォーム
プラットフォーム GNU ほか
内包元 GNUオペレーティングシステム
対応言語 English
ライセンス GNU General Public License version 2
公式サイト www.gnu.org/software/software.html
テンプレートを表示

GNU Autotools、またはGNU Build Systemとは、主にUnix系オペレーティングシステム (OS) においてソフトウェアパッケージ開発を行うための、ツール及びフレームワークの一種である。このツールを使用することにより、多種多様なUNIX互換環境にパッケージを対応させることが容易になる。 Autotoolsは主に Autoconf/Automake/Libtool の3つから成り立っている[1]。他の関連するツールには GNU makeGNU gettextpkg-configGNUコンパイラコレクションなどがある。

AutotoolsはGNUツールチェーンの一部であり、多くの自由ソフトウェアオープンソースパッケージで広く使用されている。そのコンポーネントツールは自由ソフトウェアであり、GNU General Public License の下でライセンスされているが、特別なライセンス例外によりプロプライエタリソフトウェアでの使用が許可されている[2][3]

動機

ソフトウェアプログラムを移植可能にするのは難しい場合がある。コンパイラはシステムによって異なり、一部のシステムでは特定のライブラリ関数が欠落していることがある。コンパイラファイル(Cヘッダなど)の名前が異なる場合もある。共有ライブラリは、さまざまな方法でコンパイルおよびインストールされることがある。プラットフォームの違いを処理する1つの方法は、条件付きでコンパイルされたコード(つまり#ifdef経由)を記述することだが、ビルド環境が多種多様であるため、この方法はすぐに管理不能になる。Autotoolsは、この問題をより管理しやすい方法で解決するように設計されている。

Autotools(autoconf と automake)による作業の流れ

Autotoolsを用いて作成されたパッケージは容易に導入が可能である。典型的な場合、インストールまでの全工程が自動化されており、ソースコードを展開した後、以下のコマンドを入力するだけで全てが完了する。

$ ./configure && make && make install

多くのUNIX用オープンソースソフトウェアで、この方式が採用されている。

configure

configurationスクリプト(**configure**)はビルド環境の構築を一括でおこなうシェルスクリプトである[4]

プログラムのビルドは複数のツールを連携させておこなわれるが、その際、ビルド設定(例: 拡張命令フラグ)を外部から取り込み全てのツール間にそれを一貫して適用しなければならない。これを手動でおこなうことは時間の浪費でありバグの温床である。このビルド環境構築を一括して自動でおこなうスクリプトが、慣例的にconfigureと名付けられるconfigurationスクリプトである[4]。パッケージの利用者はconfigureを実行するだけでビルド環境が構築できる。

configure及び付属のスクリプト・Makefileなどは標準的なUNIXコマンドだけを使用しており、パッケージの利用者は、パッケージそのものの構築・運用に必要なソフトウェアを除いて、Autotoolsの為に特別なソフトウェアを導入する必要はない(Windows系OSではUNIXコマンドが標準で含まれていない為、別途Services for UNIXCygwinなどのUNIX互換環境のインストールが必要である)。

また、自動的な環境検査が好ましくなかったり特別な設定が必要な場合、環境変数またはコマンド引数でconfigureの動作を調整できる。代表的なオプションを以下に説明する。

--prefix=dir

インストール先を変更する。--prefix=/opt/hugaとすると、実行ファイルは/opt/huga/bin、ライブラリは/opt/huga/libというように変更される。bin、libなどを個別に変更することも出来る。デフォルトは/usr/localである。OSベンダーなどが提供するバイナリパッケージでは、--prefix=/usrや--prefix=/opt/hugaなどの設定で構築されている場合が多い。root権限のないユーザや試しに利用したい場合は、--prefix=$HOME/hugaなどとすれば、他のユーザに影響を与えることを防止できる。

--with-hoge

別のパッケージhogeを利用することを指定する。--with-hoge=_dir_でhogeのインストール先を指定できる場合もある。--with-hoge=no又は--without-hogeとすると逆に使用しないことを指定する。

環境変数 CC

環境変数CCを設定すると、その値がCコンパイラのコマンド名として使用される。設定しない場合はccまたは適切なOS標準のコンパイラに設定されるが、明示的に設定することで標準と異なるコンパイラを使用できる。

これ以外にも多くのオプションがあり、少ないパッケージでも10以上、多いパッケージでは数十から100以上の設定項目がある。利用者の設定に矛盾があったり、環境の機能に不足があれば診断情報を出力する。また、クロスコンパイル対応や、構築用の作業ディレクトリをソースコードと異なるディレクトリに設定する機能がある。

autoconf

Autoconf (autoconf) はconfigurationスクリプトを自動生成するツールである[5]

ビルド環境の自動構築をおこなうconfigurationスクリプト (configure) はそれ自体が時に数千行に渡る巨大なスクリプトになる。これを手動で記述し維持することは時間の浪費でありバグの温床である。このconfigure生成を自動でおこなうツールがAutoconfである[5]

Autoconfはconfigure.acを入力とし、configureを出力とする[6]。ユーザーがこのconfigureを実行することでビルド環境が構築される。

機能

m4言語のマクロとシェルスクリプトの断片で記述された入力ファイルconfigure.ac(古いバージョンではconfigure.in)を、autoconfがm4を用いて置換しconfigureを得る。 最終出力configureはBourne Shell用のシェルスクリプトで、数百行から数千行の長さがある。

以下に、簡単なconfigure.acの例を示す。

AC_INIT(hello, 1.9, address) # 必須設定 AC_CONFIG_SRCDIR([hello.c])

このパッケージではhogeを使用可能である configureに--with-hogeが追加される。

#(実際には、この後に利用者が--with-hoge=yesとした場合の動作定義を記述する必要がある) AC_ARG_WITH(hoge, [Use hoge])

AC_PROG_CC # Cコンパイラの設定 configureが環境変数CCを使用する AC_OUTPUT([Makefile]) # Makefile.inを雛形にしてMakefileを生成

出力のconfigureは非常に長いので掲載しない。この場合、一般的なオプションはサポートされる。利用者の要求に応じてhogeを利用するがどうかを決定する。また、Cコンパイラを探し実行方法を確認し、その結果得られたコマンド名・必要オプションなどをMakefileに出力する。

automake

GNU Automakeautomake)はMakefile.inファイルを自動生成するツールである[7]

automakeはプログラムとソースコードの関係などが記述されたMakefile.amファイルを入力とし、Makefile.inを出力する。

実行例

HelloWorldプログラムで例を示す

#Makefile.am #実行バイナリファイルの名前はhello bin_PROGRAMS = hello #helloのソースコードはhello.c,hello.h hello_SOURCES = hello.c hello.h

出力のMakefile.inは非常に長いので掲載しないが、期待した内容が得られる。 すなわち、configureを実行することでMakefileが生成される。このMakefileを用いてmakeコマンドを使用すると、hello.cをCコンパイラでコンパイルし、次いで標準ライブラリとリンクし、helloの実行ファイルが得られる。make installでは、helloはあるべき場所(ほとんどの場合は/usr/local/bin)にインストールされることになる。

脚注

  1. ^Learning the GNU development tools”. Autotoolset.sourceforge.net. 2016年4月1日閲覧。
  2. ^Savannah Git Hosting - autoconf.git/blob - COPYING.EXCEPTION”. Git.savannah.gnu.org. 2011年7月21日時点のオリジナルよりアーカイブ。2016年4月1日閲覧。
  3. ^libtool.git - GNU Libtool”. Git.savannah.gnu.org (2005年1月8日). 2016年4月1日閲覧。
  4. ^ a b "The configuration scripts that Autoconf produces are by convention called configure. When run, configure creates several files, replacing configuration parameters in them with appropriate values." 3 Making configure Scripts - Autoconf - gnu.org. 2022-06-11閲覧.
  5. ^ a b "Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages." Autoconf - gnu.org.
  6. ^ "To create a configure script with Autoconf, you need to write an Autoconf input file configure.ac" 3 Making configure Scripts - Autoconf - gnu.org.
  7. ^ "GNU Automake is a tool for automatically generating Makefile.in files" Automake - gnu.org. 2022-06-11閲覧.

関連項目

参考文献

『GNU Autoconf/Automake/Libtool』 Gary V. Vaughan, Ben Elliston, Tom Tromey, Ian Lance Taylor著 でびあんぐる監訳 ISBN 4-274-06411-5

外部リンク

GNUプロジェクト
歴史 GNU宣言 GNUプロジェクト フリーソフトウェア財団 欧州 インド ラテンアメリカ 自由ソフトウェアの定義 FLOSSの歴史
ライセンス GNU General Public License リンク例外 フォント例外 GNU Lesser General Public License GNU Affero General Public License GNU Free Documentation License GNAT Modified General Public License
ソフトウェア(一覧 GNU 派生 Hurd Linux-libre glibc Bash Coreutils Autotools GCC binutils GDB GRUB GNUstep GIMP Jami Emacs TeXmacs Octave Taler R GSL GMP Electric Archimedes GNUnet GNU Privacy Guard Gnuzilla IceCat GNU Health GNUmed LilyPond Go Chess Gnash Gnulib Bazaar
代表者 アレシャンドリ・オリヴァ ベンジャミン・マコ・ヒル ブラッドリー・M・クーン ブライアン・フォックス エベン・モグレン フェデリコ・ハインツ ゲオルク・C・F・グレーフェ リカルド・ガリ リチャード・ストールマン ロバート・J・シャッセル ジョン・サリバン
その他 GNU/Linux名称論争 Revolution OS The Cathedral and the Bazaar BadVista Defective by Design
カテゴリ