クロスコンパイルの場合は、CMakeまたはAutotoolsのいずれかを選択することをお勧めします。特に、複数のアーキテクチャ/プラットフォーム用にコードをコンパイルできる場合私は、通常、ユニットテスト目的のためにネイティブマシン上で自分のコードのサブセットをコンパイルし、ターゲットプラットフォーム用にそのすべてをコンパイルします。 CMakeはこれを特にうまく処理します。これは、クロスコンパイルされたライブラリがどこにあるのかを指定できるようにするためです。したがって、/ usr/libにあるクロスコンパイルされたlibpngを検索するのではなく、/ opt/arm-eabi-gcc /またはビルドマシンにツールチェーンライブラリがインストールされている場所を調べるように指示することができます。さまざまなバリアントに複数のビルドディレクトリを作成し、それぞれのバリアントをmakeで手動でコンパイルするか、braindeadで手作業で再帰的にmakeを実行することができます。
Antには、基本的にはバニラのMakeと同じか悪いという欠点があります.CやC++では特に主流ではないという欠点があります。ライブラリや実行可能ファイルへのヘッダファイルへのCファイルやサードパーティのライブラリとのリンクなどの外部依存関係のような、あなた自身の依存関係をすべて処理する必要があります。私はAnt Cのタスクが実際にそれほど維持されているとは思わない。私が見てきたすべての人は、GCCにexecタスクを呼び出すCの支持者のためにAntを使用しています。
SConsは優れていますが、クロスコンパイルはその強みではありません。 CMakeやAutotoolsのような "ビルドシステム"ではなく、ビルドツールだけです。それは彼らのwikiで言う通り、it is pretty much "Make in Python"です。それは依存関係の処理を組み込んでいます。つまり、 "gcc -MM -MD"などで自分自身をロールする必要がないので、Makeよりも利点があります。 SConsは、インストールされているサードパーティのライブラリを検出する機能もサポートしていますが、通常行われている方法でビルド時間を大幅に増やすことができます。他のシステムとは異なり、SConsは実行するたびに検査段階を実行しますが、ほとんどの結果はキャッシュされます。 SConsは長いビルド時間でも悪名高いですが、問題ではない50個のファイルについてはそうです。 SConsでのクロスコンパイルのサポートは存在しません。あなた自身をロールバックする必要があります。as discussed on this thread on the mailing list通常、ビルドをUnixプラットフォームのように強制してから、Cコンパイラの名前を上書きします。複数のバリアントをビルドするか、ビルドディレクトリをソースディレクトリから分離するのは難点です。コードをクロスコンパイルし、ネイティブにコンパイルするとあまり適切ではありません。
CMakeとAutotoolsの依存関係の問題は非常によくわかっており、autotoolsのクロスコンパイルのサポートは成熟しています。 CMakeは2008年4月にリリースされたバージョン2.6.0からクロスコンパイルしています。これらの機能は無料で、パッケージングやユニットテスト(make checkや同様のターゲット)のようなものもあります。これらのツールの両方の欠点は、ブートストラップが必要なことです。CMakeの場合は、MakefileまたはVisual Studioのソリューションファイルを作成するためにCMakeバイナリをインストールする必要があります。 Autotoolsの場合、ソフトウェアをコンパイルするすべての人にautomakeとautoconfがインストールされているわけではなく、ビルドシステムを変更する必要がある人のみ(ビルドシステムの変更として新しいファイルを追加する) 2段階のブートストラップ(configure.ac - > configure、configure + Makefile.in - > Makefile)は概念的に分かりにくいです。
編集のため:クロスコンパイルは、プログラムとライブラリの自動検出に複雑さを増やす理由から、ビルドシステムでは余計な頭痛です。 SConsはこの問題に対処していません。 Antは同様に何もしません。 Autoconfはautotoolsの場合にこれを処理しますが、リンクフェーズで/ usr/libを使用しようとすると、リンクが壊れたりリンクが途切れたりすると、コマンドラインに "--with-libfoobar =/some/path" 。 CMakeのアプローチはtoolchainファイルのほうが少し重いですが、あなたが考え出したツールとライブラリ(CC、CXX、RANLIB、--with-ibfoo =など)をすべて指定する必要はありません標準的な慣習である。理論的には、適切に細工されたCMakeツールチェインファイルを複数のプロジェクトで再利用してクロスコンパイルすることができます。実際にはCMakeは一般的なハッカーにとってこれを便利にするのに十分ではありませんが、複数のプロプライエタリなプロジェクトを作成する場合には便利です。