Autotools、Cmake、Sconsの違いは何ですか?
実際、Autotoolsの唯一の本当の「節約」は、すべてのGNUプロジェクトが主に使用していることです。
Autotoolsの問題:
これは機能します...ほとんどの場合... Autotoolsについて言えることはすべてです。これは、基本的なコアツールチェーンコードのGNUプロジェクトにのみ関係するいくつかの問題を解決するシステムです。 (編集(2014年5月24日):この種の懸念は潜在的にBADであることに注意する必要があります心配すること-Heartbleedは部分的にこの考え方に由来し、正しい最新のシステムでは、あなたはreally持っていないAutotoolsが修正するものの多くを扱っているビジネスGNUは、おそらくHeartbleedで何が起こったのかを考慮して、コードベースの大雑把な削除を行う必要があります)プロジェクトを行うためにそれを使用できます。 Linux以外、またはGNUツールチェーンが明らかに正しく機能している場所以外では動作しないと思われる小さなプロジェクトの場合。 「Linuxとうまく統合する」というステートメントは、quite太字のステートメントであり、かなりincorrect GNUツールと適切に統合され、ITがその目標に関して抱えている問題を解決します。
これは、ここでスレッドで説明した他のオプションに問題がないと言うことではありません。
SConsは、Make/GMake/etcに代わるものです。とても素敵に見えますが、すべてのものが考慮されます.
このスレッドでCMakeに与えられた例は少し偽です。
しかしながら...
実際、あなたの目標はここで何を選択するかを決定するべきです。
多くのプロジェクトがqmakeやAutotoolsなどを捨て、CMakeに移行している理由があります。これまでのところ、CMakeベースのプロジェクトがクロスコンパイルの状況またはVisualStudioセットアップに落ちるか、プロジェクトがWindowsのみまたはOSXのみの部分を考慮していないため、少量のクリーンアップのみが必要であることを明確に期待できますコードベースに。私はSConsベースのプロジェクトからそれを本当に期待することはできません-そして、私は完全に1/3以上のAutotoolsプロジェクトが得られたことを期待します何かホストが1つまたはScratchbox2を1つだけ構築する場合を除いて、どのようなコンテキストでも構築できなくなるという誤り。
誰がツールを使用するかを重要に区別する必要があります。 Cmakeは、ソフトウェアをビルドするときにユーザーが使用する必要があるツールです。 autotoolsは、SuS準拠システムで利用可能な標準ツールのみを使用してソフトウェアを構築するために使用できる配布tarballを生成するために使用されます。つまり、autotoolsを使用してビルドされたtarballからソフトウェアをインストールする場合、autotoolsを使用していないです。一方、Cmakeを使用するソフトウェアをインストールする場合は、Cmakeを使用してareをインストールし、ソフトウェアをビルドする必要があります。
大多数のユーザーは、ボックスに自動ツールをインストールする必要はありません。歴史的に、多くの開発者が不正なtarballを配布して、ユーザーにautoconfを実行させてconfigureスクリプトを再生成させるため、多くの混乱が生じました。これはパッケージングエラーです。ほとんどの主要なLinuxディストリビューションは、デフォルトでそれらのいずれもインストールすべきではないときに、複数のバージョンのautotoolsをインストールするという事実により、さらに混乱が生じています。さらに混乱は、tarballをビルドするのではなく、バージョン管理システム(cvs、git、svnなど)を使用してソフトウェアを配布しようとする開発者によって引き起こされます。
GNUコーディング標準ではありません。
Autotoolsの現在の利点は、特にautomakeで使用する場合、Linuxディストリビューションの構築と非常にうまく統合できることです。
たとえば、cmakeでは、「-DCMAKE_CFLAGSまたは-DCMAKE_C_FLAGSが必要でしたか?」いいえ、どちらでもありません。「-DCMAKE_C_FLAGS_RELEASE」です。または-DCMAKE_C_FLAGS_DEBUG。混乱を招きます-autoconfでは、。/ configure CFLAGS = "-O0 -ggdb3"であり、それがあります。
ビルドインフラストラクチャとの統合では、sconsにはmake %{?_smp_mflags}
を使用できないという問題があります。この場合、_smp_mflags
は、おおまかにシステム電源に拡張される(管理者が設定する)RPMマクロです。人々は、環境を通して-jNCPUSのようなものをここに置きます。 sconsが機能しないため、sconsを使用するパッケージは、ディストリビューションでビルドされたシリアルのみになります。
Autotoolsについて知っておくべき重要なことは、それらが一般的なビルドシステムではないことです-それらはGNUコーディング標準を実装し、それ以外は何もしません。すべてのGNU標準に従うパッケージを作成する場合、Autotoolsはこの仕事に最適なツールです。そうでない場合は、SconsまたはCMakeを使用する必要があります。 (たとえば、 この質問 を参照してください。)このよくある誤解は、Autotoolsのフラストレーションのほとんどが由来するところです。
開発者の観点から見ると、cmakeは現在最も使いやすいですが、ユーザーの観点からすると、オートツールには1つの大きな利点があります
autotoolsは単一のファイル構成スクリプトを生成し、生成するすべてのファイルはディストリビューションに付属しています。 grep/sed/awk/viを使用すると、簡単に理解して修正できます。これを、/ usr/share/cmak */Modulesに多数のファイルが存在するCmakeと比較してください。このファイルは、ユーザーが管理者アクセス権を持たない限り修正できません。
そのため、何かがうまく機能しない場合、ビルドシステムを理解する必要なく、通常の方法で標準Unixツール(grep/sed/awk/viなど)を使用して簡単に「修正」できます。
何がおかしいのかを見つけるためにcmakeビルドディレクトリを掘り下げたことはありますか?上から下に読むことができる単純なシェルスクリプトと比較して、生成されたCmakeファイルを追跡して何が起こっているのかを見つけることは非常に困難です。また、CMakeを使用してFindFoo.cmakeファイルを調整するには、CMake言語の知識だけでなく、スーパーユーザー特権も必要になる場合があります。