Autotools、Cmake、Sconsの違いは何ですか?
Autotools、Cmake、Sconsの違いは何ですか?
回答:
実際には、Autotoolsの唯一の真の「恵みを節約する」とは、それがすべてのGNUプロジェクトが主に使用していることです。
Autotoolsの問題:
それは機能します...ほとんどの場合... Autotoolsについて言えることはそれだけです。これは、GNUプロジェクトにのみ関係するいくつかの問題を解決するシステムです...そのベースとなるコアツールチェーンコードについてです。(編集(2014年5月24日)):この種の懸念は心配する必要がある潜在的に悪いことであることに注意してください-Heartbleedはこの考え方から部分的に生じており、正しい最新のシステムでは、本当にAutotoolsが修正することの多くを扱うビジネスはありません。GNUはおそらく、Heartbleedで何が起こったかに照らして、コードベースを手際よく削除する必要があります)これを使用してプロジェクトを実行でき、Linux以外の場所では機能しないと思われる小さなプロジェクトでうまく機能する可能性がありますGNUツールチェーンは明らかに正しく機能しています。声明は「きれいのLinuxと統合」であることは非常に大胆な声明とはかなり間違いました。それは、GNU toolsuiteと合理的にうまく統合し、ITがその目標に持っている問題を解決します。
これは、ここのスレッドで説明されている他のオプションに問題がないと言っているのではありません。
SConsはMake / GMake / etcの代替品です。見た目はとてもいいですが、すべてを考慮しましたが...
このスレッドでのCMakeの例は少し偽物です。
しかしながら...
実際、あなたの目標は、ここで何を選択するかを決定する必要があります。
多くの、多くのプロジェクトがqmakeやAutotoolsなどを捨て、CMakeに移行しているのには理由があります。これまでのところ、プロジェクトがWindowsのみまたはOSXのみの部分を考慮していないため、CMakeベースのプロジェクトがクロスコンパイル状況またはVisualStudioセットアップにドロップするか、少量のクリーンアップが必要になることを期待できます。コードベースに。私は実際にプロジェクト-ベースSConsはの外を期待することはできませんし、私は完全に得ているために1 /第3回以上Autotool群のプロジェクトを期待SOMETHING排除は、それが1つまたはScratchbox2の1を構築するホスト以外の任意の文脈上で右構築することを間違って。
ツールを使用するユーザーを区別する必要があります。Cmakeは、ソフトウェアをビルドするときにユーザーが使用する必要があるツールです。autotoolsは、SuS準拠のシステムで利用可能な標準ツールのみを使用してソフトウェアを構築するために使用できる配布tarballを生成するために使用されます。つまり、autotoolsを使用して構築されたtarballからソフトウェアをインストールする場合、autotoolsは使用されません。一方、Cmakeを使用するソフトウェアをインストールする場合は、Cmakeを使用しているため、ソフトウェアをビルドするためにCmakeをインストールする必要があります。
大多数のユーザーは、autotoolsをボックスにインストールする必要はありません。歴史的に、多くの開発者は、ユーザーがautoconfを実行してconfigureスクリプトを再生成するように強制する不正な形式のtarballを配布しているため、多くの混乱が生じています。これはパッケージングエラーです。ほとんどの主要なLinuxディストリビューションが複数のバージョンのautotoolsをデフォルトでインストールするべきではないのにインストールするという事実により、さらに混乱が生じています。tarballをビルドするのではなく、バージョン管理システム(cvs、git、svnなど)を使用してソフトウェアを配布しようとする開発者が、さらに混乱を引き起こしています。
asciidoc
か、help2man
またはdoxygen
、重要なのは、正しいautotoolの組み合わせをか。これはautotoolsの大きなマーケティング上の問題でした。ユーザーは、tarballとVCSの違いを理解していないため、autoconfをインストールする必要があると誤解しています。
それは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を使用するパッケージは、ディストリビューションでシリアルにビルドされるだけです。
./configure CFLAGS=-O0
に、makefile内のCFLAGSを上書きし、代わりにユーザーがを実行する必要があるパッケージで 失敗することがよくあります./configure --enable-debug
。(例tmux
)。
Autotoolsについて知っておくべき重要なことは、それらが一般的なビルドシステムではないということです-それらはGNUコーディング標準を実装するだけで、他には何もありません。すべてのGNU標準に準拠したパッケージを作成する場合、Autotoolsはその仕事に最適なツールです。そうでない場合は、SconsまたはCMakeを使用する必要があります。(たとえば、この質問を参照してください。)このよくある誤解は、Autotoolsのフラストレーションのほとんどが原因です。
AUTOMAKE_OPTIONS = -foreign
ますMakefile.am
。(または-foreign
あなたのautogen.sh
。ほとんどの人がこれを使っていると思います。)
installcheck
andのようなルールでGNUスタイルのtarballを構築するという基本的な前提は変わりませんdistclean
。Autotoolsを使用しているときにそのような動作を変更しようとすると、時間を浪費しているだけです。
開発者の観点からは、現在cmakeが最も使いやすいですが、ユーザーの観点からすると、autotoolsには大きな利点が1つあります
autotoolsは単一のファイル構成スクリプトを生成し、それを生成するためのすべてのファイルはディストリビューションに付属しています。grep / sed / awk / viを使用すると、簡単に理解して修正できます。これを、多くのファイルが/ usr / share / cmak * / ModulesにあるCmakeと比較してください。このファイルは、管理者のアクセス権がない限り、ユーザーが修正することはできません。
したがって、何かがうまくいかない場合は、ビルドシステムを理解しなくても、標準のUnixツール(grep / sed / awk / viなど)を大ハンマーで使用することで、簡単に「修正」できます。
cmakeビルドディレクトリを調べて何が問題なのかを見つけたことがありますか?上から下に読むことができる単純なシェルスクリプトと比較して、生成されたCmakeファイルをたどって何が起こっているのかを見つけるのは非常に困難です。また、CMakeを使用してFindFoo.cmakeファイルを調整するには、CMake言語の知識だけでなく、スーパーユーザー権限も必要になる場合があります。