GNUオートツール

GNUオートツール
原作者コミュニティ
開発者フリーソフトウェア財団
安定版リリース
複数
書かれたM4(コンピュータ言語)C
オペレーティング·システムクロスプラットフォーム
プラットフォームGNUなど
含まれるものGNUオペレーティングシステム
入手可能な英語
ライセンスGNU 一般公衆利用許諾書バージョン 2
Webサイトwww .gnu .org /ソフトウェア/ソフトウェア.html

GNU Autotools ( GNU Build Systemとも呼ばれる)は、ソースコードのビルドと生成されたバイナリのパッケージ化を支援するために設計されたビルド自動化ツールスイートです。コードをカスタマイズしたり変更したりすることなく、複数のターゲットシステム向けのコードベースを構築できます。多くのLinuxディストリビューションUnix系環境 で利用可能です。

AutotoolsはGNUツールチェーンの一部であり、多くのフリーソフトウェアおよびオープンソースパッケージで広く使用されています。そのコンポーネントツールはフリーソフトウェアであり、GNU一般公衆利用許諾書(GPL )の下でライセンスされていますが、特別なライセンス例外[ 1 ] [ 2 ]によりプロプライエタリソフトウェアでの使用が許可されています。

モチベーション

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

コンポーネント

AutotoolsはGNUユーティリティAutoconfAutomakeLibtoolで構成されています。[ 3 ]その他の関連ツールにはGNU make、GNU gettextpkg-configGNUコンパイラコレクション(GCC)などがあります。

使用法

Autotools ツールのフロー図。

Autotoolsは、比較的幅広いユーザーコミュニティとのクロスプラットフォームソフトウェアの共有を支援します。比較的堅牢なクロスプラットフォームビルドサポートを提供することでソースコードの共有を容易にし、利用者がソフトウェアを自らビルドできるようにします。通常、ソースコードはconfigureというスクリプトと共に配布されます。このスクリプトはBourne互換シェル以外には依存関係がありません。Autotoolsが利用可能である必要はありません。利用者はconfigureを実行し、 Makefileを含む様々なファイルを生成します。Makefileは、利用者がconfigureを実行することで使用されます。[ 4 ] [ 5 ]configuremake

Autotoolsは、ビルドマシン上でネイティブプログラムをビルドするためにも、他のアーキテクチャへのクロスコンパイルにも使用できます。 [ 6 ]

MinGW を使用すると、Linux や他の Unix 系ビルド システムから Windows ホスト上で実行するためのソフトウェアのクロス コンパイルも可能ですが、Bourne Shell スクリプトを単独で実行できないオペレーティング システム ( Microsoft Windowsファミリのシステムなど) ではネイティブ コンパイルが望ましい場合が多くあります。このため、Windows オペレーティング システム上でそのようなソフトウェアを構築するのは、Bourne Shell を標準コンポーネントとして提供するUnix 系システム上よりも少し難しくなります。ただし、 Windows 上にCygwinまたはMSYSシステムをインストールしてUnix 系互換性レイヤーを提供し、configureスクリプトを実行できるようにすることができます。Cygwin は、GNU コンパイラ コレクションGNU make 、および Windows 内でほぼ完全な Unix 系システムを提供するその他のソフトウェアも提供しています。MSYS は、GCC のMinGWバージョンで動作するように設計された GNU make およびその他のツールも提供しています。

消費者は、ソースコードを修正する際に必要となる可能性のあるconfigureスクリプトを再生成できます。この場合、Autotoolsがインストールされている必要があります。

autoconfによって生成されるconfigureスクリプトは、Cコンパイラなどのプログラムを複数回実行し、様々なライブラリ、ヘッダーファイル、言語機能が存在するかどうかをテストするため、実行速度が遅くなる可能性があります。これは特にCygwinで顕著です。Cygwinはネイティブのforkシステムコールを持たないため、 Linuxよりもconfigureスクリプトの実行速度がかなり遅くなる可能性があります。[ 7 ]

批判

FreeBSD開発者のPoul-Henning KampはACM QueueのコラムでGNUビルドシステムを批判した。[ 8 ]

configure スクリプトが約200の自動テストを実行することで、ユーザーがlibtoolを手動で設定する負担を軽減するというアイデアです。これは非常にまずいアイデアで、1980年代に登場した当時から既に多くの批判を受けていました。configure スクリプトの見せかけの裏で、ソースコードが移植可能であるかのように見せかけることができるものの、実際にはそもそも移植性を備えていないからです。configure というアイデアが生き残ったことは、まさに茶番です。

Kamp 氏は、 1980 年代の多数の Unix バリアントに固有の移植性の問題におけるビルド システムの歴史を概説し、そのようなビルド システムが存在する必要性を嘆いています。

libtool の 31,085 行の configure は、<sys/stat.h><stdlib.h>が存在するかどうかを依然としてチェックしますが、これらが欠如している Unixen には、libtool を実行するための十分なメモリも、16 MB のソース コードを格納するのに十分なディスクもありません。

Autotoolsの批判者は、ユーザーにとってよりシンプルな代替手段を頻繁に提唱していますが、これは必ずしも良いことではないと主張する人もいます。 『 Autotools, 2nd Edition: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool』の著者[ 9 ]であるジョン・カルコートは、次のように述べています。[ 10 ]

Autotoolsは、他のどのビルドツールよりも透明性が高いと言えるでしょう。他のツール(cmake、mavenなど)は、ビルドプロセスの詳細をユーザーから遮断することで、はるかにシンプルだと謳っていますが、その遮断によって、ユーザーがプロジェクト固有のビルド目標を達成するために必要な変更を加えることができないという根本的な欠点があります。

cmake、maven、gradle、その他諸々のツールのこの点について良いことしか言わない人は、単にデフォルトから大きく逸脱する必要があるプロジェクトに携わったことがないだけでしょう。私はそれら全てを使ってきましたが、(自分が望む機能以外は)「何でもできる」ツールの欠点をどう回避するかを試行錯誤して、何時間もイライラしました。Autotoolsでは、これは全く問題になりません。このスレッドで以前誰かが言っていたように、シェルスクリプトをconfigure.acファイルに、makeスクリプトをMakefile.amファイルに書き込むことができます。まさに透明性の定義です。これほどの柔軟性を実現できるツールは他にありません。

参照

参考文献

  1. ^ 「Savannah Git Hosting - autoconf.git/blob - COPYING.EXCEPTION」 . Git.savannah.gnu.org . 2011年7月21日時点のオリジナルよりアーカイブ。 2016年4月1日閲覧
  2. ^ "libtool.git - GNU Libtool" . Git.savannah.gnu.org . 2005年1月8日. 2016年4月1日閲覧
  3. ^ 「GNU開発ツールの学習」 . Autotoolset.sourceforge.net . 2016年4月1日閲覧。
  4. ^ "automake: GNU ビルドシステム" . Gnu.org . 2014年12月31日. 2016年4月1日閲覧
  5. ^ 「GNU configureおよびビルドシステム - はじめに」 Airs.com 1998年7月1日2016年4月1日閲覧
  6. ^ 「GNU Autotoolsによるクロスコンパイル」 。 2008年10月13日時点のオリジナルよりアーカイブ2008年9月24日閲覧。
  7. ^ 「Robert Ögren - Cygwinでのシェルスクリプトの実行が遅い」 . Cygwin.com . 2016年4月1日閲覧
  8. ^ Kamp, Poul-Henning (2012). 「バザールで迷子になった世代」 . ACM Queue . 10 (8): 20– 23. doi : 10.1145/2346916.2349257 . S2CID 11656592 . 
  9. ^ 「Autotools、第2版、ジョン・カルコート著 | ペンギンランダムハウスカナダ」2021年1月22日閲覧
  10. ^ 「Re: Autotoolsの今後の計画」 。 2021年1月22日閲覧