私は長年makeとmakefileを使用してきましたが、概念は健全ですが、実装には望ましいことがあります。
誰かが問題を過度に複雑にしないための良い代替物を見つけましたか?
SCons を確認してください。例えば、Doom 3とBlenderはそれを利用します。
クロスプラットフォーム開発のためにCMakeを誓う多くの友人がいます。
[〜#〜] vtk [〜#〜] (その他)に使用されるビルドシステムであり、クロスプラットフォームPython、Tcl、およびJavaバインディング:おそらく、これほど多くの機能を使用して見つけるのが最も簡単なことだと思います。
常に標準の autotools を試すことができます。 Unixでのみ実行している場合、およびC/C++に固執する場合、Automakeファイルは非常に簡単にまとめることができます。統合はより複雑であり、autotoolsはこれまでで最も単純なシステムとはほど遠いものです。
GNOMEプロジェクトの一部は waf に移行しています。
SconsのようにPythonベースですが、スタンドアロンでもあります。したがって、他の開発者にお気に入りのビルドツールをインストールしてもらうのではなく、スタンドアロンビルドスクリプトをプロジェクトにコピーするだけです。
Rake を使用することをお勧めします。これは私が見つけた最も簡単なツールです。
しかし、Rubyがあなたのものでない場合、私が使用した他の優れたツールは次のとおりです。
doit は、pythonツールです。build-toolsの概念に基づいていますが、より一般的です。
ninja
ビルドツール(v1.8.2 Sept 2017)に注意してください。これは tup
および redo
。
ビルドファイルジェネレーター cmake
(例:Unix Makefiles、Visual Studio、XCode、Eclipse CDTなど)は、バージョン2.8以降のninja
ビルドファイルも生成できます。 8(2012年4月)およびafaik、ninja
はcmake
で使用されるデフォルトのビルドツールです。
make
ツールよりも優れていると思われます(より良い依存関係の追跡と並列化)。
cmake
はすでに確立されたツールです。構成ファイルを変更せずに、いつでも後でビルドツールを選択できます。したがって、cmake
でサポートされるより良いビルドが将来開発される場合、便利に切り替えることができます。
C/c ++の場合、プリプロセッサを介してヘッダーが含まれるため(特にヘッダーのみのライブラリを使用する場合、たとえば boost & eigen ) modules (c ++ 11の技術レビューまたは最終的にc ++ 1y)の提案に置き換えられることを期待しています。この問題の詳細については、こちらをご覧ください presentation .
sake というツールを作成し、メイクファイルのようなものを非常に簡単に読み書きできるようにしようとしました。
それはあなたが何をしようとしているのかに依存します。 allがmakeスタイルのターゲット依存関係とコマンド呼び出しである場合、Makeは実際にはタスクに適したツールの1つです。 :-) Rakeはとてもいいですが、いくつかの単純なケースでは扱いにくいことがあります。 Antはもちろん冗長な都市ですが、Javaに似た言語(ScalaとGroovyを含む)の構築をよりよくサポートしています。また、Antは利用可能ですeverywhere。それが私がそれを使用する主な理由です。 Windows上で一貫して動作するため、実際にはMakeよりもクロスプラットフォームです。
Javaライクなライブラリの依存関係管理が必要な場合、Mavenが標準的な選択ですが、個人的にはBuildrの方がずっと好きです。より速く、はるかに簡単にカスタマイズできます(Rakeに基づいています)。残念ながら、まだMavenほどユビキタスではありません。
選択肢の束を考慮した後、私はまだメイクを好む。コンパイラーまたはfastdepなどを介して依存関係を自動生成した場合、やるべきことはあまりありません。特に、ビルドスクリプトを実装言語に結び付けたくはありません。また、より読みやすい代替が利用可能な場合は、XMLで記述したくないです。汎用言語を公開するツールにはメリットがありますが、別のインタープリター言語にはメリットがありません(afaik)。 Makeの間違ったところは何ですか? は、makeからの移行についてのあなたの観点に訴えるかもしれません。
/アラン
Rubyのmakeシステムはrakeと呼ばれます: http://rake.rubyforge.org/
とても有望に見えます。
Antは常にあります: http://ant.Apache.org 。ただし、これはJava開発の事実上の標準です。
ここで正しい質問をしているかどうかはわかりません。
簡単なメイクをした後ですか?その場合、makeに精通した人に、問題を単純化する一連の(M | m)akefileを作成してもらう必要があります。
それとも、基礎となるテクノロジーを見たいですか?コードデザインに組み込まれ、コードデザインに適用される、契約ごとのデザインタイプのアーキテクチャを適用する必要がありますか?または場合によっては、言語自体、たとえばAdaとその仕様(インターフェース)およびボディ(実装)の概念は?
あなたがどちらの方向に進むかは、そのような質問の潜在的な結果に間違いなく影響しますか?
基本的に、実際に変更されたコンポーネントのみからシステムを構築する新しい方法と、そのようなメカニズムを設計で組み込んだ新しいテクノロジーの採用です。
申し訳ありませんが、直接的な回答ではありません。ただ、あなたがどの道を進んで行きたいかを評価してもらいたいと思いました。
乾杯、
ロブ
RTDAのFlowTracerは、大規模な環境(数万のジョブ)で商業的に使用されているのを見たもう1つの良い選択です。 http://www.rtda.com/flowtracer-design-flow-infrastructure-software
ジョブの場合は色付きのボックス、ファイルの場合は楕円形の依存関係グラフを表示するGUIがあります。ジョブとファイルの数が多くなると、FlowTracerのようなGUIベースのツールが非常に重要になります。
初期設定コストはMakeよりも高くなっています。それを使用して最初のフローを設定するための学習曲線があります。その後、より速くなります。