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

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

私は時々ソースからアプリケーションをコンパイルし、次のものを使用してきました。

./configure
make
sudo make install

./autogen.shしかし、最近は設定を作成し、スクリプトを作成して実行することがわかりました。

C / C ++ / C#(モノラル)コンパイルを簡素化する他の方法は何ですか?ちょっと老いそうですね。新しいツールがありますか?選択が与えられたら、どれを使うべきですか?

答え1

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年代には、ソースコードをコンパイルするためのほとんどの追加情報ファイルで開発者にconfig.hファイルを編集し、システムで利用可能な適切な機能をコメントアウトするか、テストされたすべてのオペレーティングシステム構成用の標準のconfig.hファイルを提供するようにします。指示しました。

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

通常、検出コードをconfigure.acファイルに書き込んでから、autoconfコマンドを実行します。このコマンドは、そのファイルを使用して実行可能な構成コマンドにコンパイルします。

したがって、実行すると./configure && makeシステムは利用可能な機能を検出し、検出された設定を使用して実行可能ファイルを構築します。

オープンソースプロジェクトがソースコード制御システムを使用して起動するとき、configure.acファイルをチェックインすることは意味がありますが、コンパイル(設定)結果をチェックインすることは意味がありません。 autogen.shは、正しいコマンドパラメータを使用してautoconfコンパイラを呼び出す小さなスクリプトです。

-

Automakeはまた、コミュニティの既存の慣行で成長しました。 GNUプロジェクトは、Makefileの一般的な目標セットを標準化しました。

  • make allプロジェクトを構築する
  • make cleanコンパイルされたすべてのファイルはプロジェクトから削除されます。
  • make installソフトウェアがインストールされます。
  • デプロイするソースコードを準備し、その結果が完全なソースコードパッケージであることを確認するなどの作業にmake distなります。make distcheck
  • など...

繰り返し繰り返される定型句が多いので、互換性のあるmakefileを書くのは面倒です。したがって、Automakeはautoconfと統合され、「ソース」Makefile(Makefile.amという名前)をMakefileとして処理し、Autoconfに供給する新しいコンパイラです。

automake / autoconfツールチェーンは実際には他の多くの補助ツールを使用し、他の特定のタスクを実行するために他のコンポーネントと組み合わせて改善します。これらのコマンドを順番に実行する複雑さが増え続けるにつれて、すぐに実行できるスクリプトの必要性が生まれ、これがautogen.shが誕生した方法です。

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

答え2

この分野には、CmakeとGNU Autotoolsという2つの「ラージプレーヤー」があります。

  • GNU Autotools は *nix に焦点を当てて作業を行う GNU 方式です。特定の構成を作成し、実行したいアクションのファイルを生成するツールセットを提供するメタビルドシステム。これは、ビルドシステムを直接操作することなくコードをさらに変更するのに役立ち、他の人が* nixで設計されていない方法でコードをビルドするのに役立ちます。

  • Cmakeはクロスプラットフォームの方法で作業を行います。 Cmakeチームは、GCC、Visual Studio、XCode、Windows、OSX、Solaris、BSD、GNU / Linuxなど、さまざまな方法でソフトウェアを構築します。コードベースの移植性に深い関心がある場合は、これが正しい選択です。

すでに述べたように、一部の人はスコーンが好きなようです。 Pythonに精通している場合は、作業環境にさらに一貫性を提供できます。

RubyにはRakeと呼ばれるメタビルドシステムもあります。

答え3

ボル個人的な経験はありませんが、可能な代替手段です。 Pythonとしても実装されていますが、ビルド環境によっては問題になる可能性があります。

答え4

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

関連情報