automakeとautoconfはコードをコンパイルする標準的な方法ですか?


22

私は時々ソースからアプリをコンパイルし、私はどちらかを使用しています:

./configure
make
sudo make install

しかし、最近、./autogen.shconfigureおよびmakeスクリプトを生成して実行します。

C / C ++ / C#(mono)コンパイルを効率化する他の方法は何ですか?Makeは少し古いようです。新しいツールはありますか?選択肢があれば、どちらを使用すればよいですか?


「コード」のようなものは何もありません。たとえば、Javaコードを取得する場合は、おそらくmavenまたはantを使用してビルドします。Pythonを取得する場合は、setuptoolsが適切な選択肢です。何もコンパイルする標準的な方法はありません。たぶん、質問を再定式化する必要があります。
ディエガ

いい視点ね。私は実際にモノでC#でコーディングしていますが、私の質問はC / C ++にも当てはまります。
ルイサリン

小さな注意:autogen.shはmakeを実行せず、設定するだけです。
サンディ

@Sandy autogen.shはほとんどがカスタムスクリプトであり、通常は呼び出しますautoreconfが、さらにはを呼び出すこと./configureもありmakeます。その動作が何らかの形で標準化されているとは思わない。主な目的は、人々が(むしろ、彼らがカンジャーする必要があることを知ることよりも、実行することができ、プロジェクト内exetableファイルを、持っているautoreconf
ウムラウト

回答:


42

AutoconfとAutomakeは、Unixの進化の問題を解決するために設定されました。

Unixがさまざまな方向に進化したため、移植可能なコードを望んでいた開発者は次のようなコードを書く傾向がありました。

#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif

Unixがさまざまな実装(BSD、SystemV、多くのベンダーフォーク、後のLinuxおよびその他のUnixライクなシステム)に分かれたため、特定のブランドのオペレーティングシステムに依存しないコードを書くためにポータブルコードを書きたい開発者にとって重要になりました、ただしオペレーティングシステムによって公開される機能。Unixバージョンでは、「送信」システムコールなどの新機能が導入され、他のオペレーティングシステムでは採用されるため、これは重要です。ブランドとバージョンをチェックするコードのスパゲッティを使用する代わりに、開発者は機能ごとの調査を開始したため、コードは次のようになりました。

#if HAVE_SEND
Use Send here
#else
Use something else
#endif

90年代にソースコードをコンパイルするためのほとんどのREADMEファイルは、config.hファイルを編集し、システムで使用可能な適切な機能をコメントアウトするか、テストされた各オペレーティングシステム構成の標準config.hファイルを出荷するように開発者に指摘しました。

このプロセスは面倒でエラーが発生しやすく、これがAutoconfの成り立ちです。Autoconfは、config.hの人間による編集プロセスを、オペレーティングシステムの機能を調査するツールに置き換えることができる特別なマクロを備えたシェルコマンドで構成される言語と考える必要があります。

通常、configure.acファイルにプロービングコードを記述してから、autoconfコマンドを実行し、このファイルを使用済みの実行可能なconfigureコマンドにコンパイルします。

その./configure && makeため、実行すると、システムで利用可能な機能を調査し、検出された構成で実行可能ファイルをビルドしていました。

オープンソースプロジェクトがソースコード管理システムを使用して開始したとき、configure.acファイルをチェックインすることは意味がありましたが、コンパイル(configure)の結果はチェックインしませんでした。autogen.shは、正しいコマンド引数を指定してautoconfコンパイラーを呼び出す小さなスクリプトにすぎません。

-

Automakeは、コミュニティの既存のプラクティスからも成長しました。GNUプロジェクトは、Makefileのターゲットの標準セットを標準化しました。

  • make all プロジェクトをビルドします
  • make clean プロジェクトからすべてのコンパイル済みファイルを削除します
  • make install ソフトウェアをインストールします
  • 以下のようなものmake distとは、make distcheck配布用のソースを準備し、結果は完全なソースコードパッケージしたことを確認します
  • 等々...

何度も繰り返される定型文がたくさんあったため、準拠するメイクファイルを作成するのは面倒です。したがって、Automakeは、autoconfと統合し、「ソース」Makefile(Makefile.amという名前)を処理して、MakefileをAutoconfに渡すことができる新しいコンパイラでした。

automake / autoconfツールチェーンは、実際には他の多くのヘルパーツールを使用し、他の特定のタスクのために他のコンポーネントによって拡張されます。これらのコマンドを順番に実行する複雑さが増すにつれて、すぐに実行できるスクリプトの必要性が生まれました。これがautogen.shの由来です。

私の知る限り、Gnomeはこのヘルパースクリプトautogen.shの使用を導入したプロジェクトでした


ちょっとした注意:GNU標準では、生成されたファイルをtarballで出荷することを義務付けています。これにより、ビルドの依存関係を最小限の汎用ツールに減らすことができます。(たとえばバージョン管理システムから)生のソースを取得した場合、生成されたファイルはそこにありません。
フォンブランド

14

このエリアには2つの「ビッグプレーヤー」がいます。Cmake、およびGNU Autotools。

  • GNU Autotoolsは、物事を行うGNUの方法であり、* nixにかなり焦点を合わせています。これは一種のメタビルドシステムで、特定の設定を生成し、目的のファイルを作成するツールのセットを提供します。これにより、ビルドシステムを直接操作せずにコードをさらに変更できます。また、* nixの下では、他の人が設計していない方法でコードをビルドできます。

  • Cmakeは、クロスプラットフォームで物事を行う方法です。Cmakeチームは、GCC、Visual Studio、XCode、Windows、OSX、Solaris、BSD、GNU / Linuxなど、さまざまな方法でソフトウェアを構築しています。コードベースの移植性にまったく関心があるなら、これが道です。

すでに述べたように、一部の人々はSconsを好むようです。Pythonに精通している場合、作業環境の一貫性が向上する可能性があります。

また、RubyにはRakeと呼ばれる一種のメタビルドシステムがあります。これは、それ自体が非常にクールであり、Rubyに既に慣れている人にとって非常に便利です。


6

は個人的な経験はありませんが、Sconsは可能な代替品の1つです。また、Pythonで実装されているため、ビルド環境によっては問題になる可能性があります。


2
Pythonは事実上どこにでもあるので、移植性は問題ではありません。SConsに関するこれまでの主な不満は、容認できないほど遅いことです。速度を優先してビルドの精度を犠牲にするいくつかの微調整がありますが、まだMakeと同等かどうかはわかりません。
アレックスB

3

C#/ Monoを使用している場合は、msbuild(MonoDevelopおよびVisual Studioで使用される.sln / .csprojファイル)を使用して、ビルドプロセス全体を管理できます。

その後、MonoDevelopからビルドするかxbuild、お気に入りのターミナルでコマンドを実行します(Mono> = 2.6で最適に動作します)。これは非常に簡単で、MonoDevelopがmsbuildファイルを処理するため、ほとんど作業を必要としません。MonoDevelopのUIでできることを超えて調整したい場合を除き、ファイルを編集する必要はありません。

msbuildに依存している人々がプロジェクトのインストールをどのように処理するかについてはよく知りませんが、いつでも尋ねることができます。;-)


ええ、xbuildについては知っていますが、手を握りたいだけのIDEから離れようとしています。さらに、MonoはMonoを使用してコンパイルされ、autoconfを使用するため、もう少し詳しく知りたいと思いました。ありがとう!
ルイサリン

1
興味深いことに、xbuildが非常にうまく機能しているため、多くのMonoプロジェクトがmsbuildに移行しようとしています。Windows / Macのサポートが少し簡単になります。Monoには非常に多くのCコードがあるため、xbuildに移行することがどれほど実用的かはわかりません。ただし、autoconfはうまく機能するので、何でもうまくいきます。:
サンディ

0

C#の場合、xbuild(およびWindowsのmsbuild)を使用して、プロジェクトファイルからプロジェクトをビルドできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.